【发布时间】:2021-09-28 14:18:28
【问题描述】:
我想我会先展示例子,然后再解释:
#include <array>
template<typename T_, size_t size_>
struct arg
{
using T = T_;
static constexpr size_t size = size_;
};
template<typename... Arugments>
struct Foo
{
template<typename Argument>
std::array<typename Argument::T, Argument::size>& getArray() // specializations of all args in Arguments should be generated
{
static std::array<typename Argument::T, Argument::size> arr;
return arr;
}
};
int main()
{
Foo<arg<int, 10>, arg<float, 10>, arg<float, 1>> myFoo;
myFoo.getArray<arg<int, 10>>();
myFoo.getArray<arg<float, 10>>(); // should return a different array than the line above
myFoo.getArray<arg<bool, 1>>(); // should NOT work because arg<bool, 10> is was not passed to Foo
}
如果有一个结构arg,其中包含如何在getArray 中构造arr 的信息。 args 列表被传递给Foo。现在我希望为Arguments 中的每个arg 生成getArray 的模板特化。如果没有为特定的 arg 生成专业化,我希望发生某种错误。
我怎样才能做到这一点?
【问题讨论】:
标签: c++11 templates variadic-templates template-specialization