【发布时间】:2020-04-06 07:43:35
【问题描述】:
我目前正在尝试使用可变参数模板,因为我正在尝试将可变参数类模板用于我正在处理的项目。我希望该类接受一个整数列表,该列表将用于创建该类的其他元素。最初,我使用模板构造函数来获取整数数组。但是,我在链接代码时遇到了问题。我想出了另一种方法来解决我的问题,使用可变参数类模板来获取整数列表,但我很好奇这段代码是否被认为是糟糕的 c++(我有一段时间没写过 C++,这感觉很 hacky)。无论如何,这是我编写的测试代码,它可以按预期编译和工作:
template<int...structure>
class testClass{
public:
testClass(){
std::size_t size = sizeof...(structure);
std::cout << size << '\n';
int arr[]{ structure... };
for (int i = 0; i < size; i++)
std::cout << arr[i] << '\n';
}
};
int main() {
testClass<1, 2, 3> c;
}
正如预期的那样,代码输出:
3
1
2
3
这个解决方案有什么问题吗?我一直在网上搜索,似乎没有人以这种方式使用可变参数模板。
提前感谢您的意见。
【问题讨论】:
-
你到底想用那个类做什么?
-
当构造函数接受一个数组参数时,它是一个运行时参数。在您的示例中,它是编译时示例。在许多情况下,它们是正交的。
-
@Evg 如果 ctor 是 constexpr 则不一定。
标签: c++ class variadic-templates parameter-expansion