gpt4 book ai didi

c++ - 递归可变函数模板

转载 作者:可可西里 更新时间:2023-11-01 18:35:41 24 4
gpt4 key购买 nike

我想编写一个类方法,它采用模板参数包,但参数为零,并“迭代”类型:

struct Bar {
template <typename T, typename... Ts>
void foo() {
// something with T that involves Bar's members
foo<Ts...>();
}
};

实现它的首选方法是什么?

最佳答案

您可以使用以下内容:

struct Bar {
template <typename... Ts>
void foo() {
int dummy[] = {0 /*Manage case where Ts is empty*/,
(bar<Ts>(), void() /* To avoid overload `operator,` */, 0)...};
(void) dummy; // suppress warning for unused variable.
}

template <typename T>
void bar()
{
// something with T that involves Bar's members
}

};

在C++17中,可以用Folding表达式简化:

struct Bar {
template <typename... Ts>
void foo() {
(static_cast<void>(bar<Ts>()), ...);
}

template <typename T>
void bar()
{
// something with T that involves Bar's members
}

};

关于c++ - 递归可变函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28880654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com