C ++模板variadic但静态
我正在使用C ++培训我的模板技能,并希望实现一个矢量类。 该类由矢量维N和类型T定义。现在我想要一个构造函数,它需要N个类型为T的变量。然而,我无法知道如何告诉变量模板只接受N参数。 也许这是可能的模板专业化? 还是我在错误的方向思考? 任何想法/想法都将不胜感激。
更多的想法
所有关于可变参数模板的示例我已经看到使用递归来遍历参数列表。 不过,我记住构造函数不能从构造函数中调用(请阅读答案中的注释)。 所以也许它甚至不可能在构造函数中使用可变参数模板? 无论如何,这只会推迟到使用具有相同基本问题的工厂功能。
一个可变的构造函数似乎是合适的:
template<typename T, int Size>
struct vector {
template<typename... U>
explicit
vector(U&&... u)
: data {{ std::forward<U>(u)... }}
{
static_assert( sizeof...(U) == Size, "Wrong number of arguments provided" );
}
T data[Size];
};
如果不是完全将Size
参数传递给构造函数,则此示例使用完美转发并使用static_assert
来生成硬错误。 这可以调整:
std::enable_if
(触发SFINAE)将硬错误转换为软错误; 我不会推荐它 sizeof...(U) <= Size
,让剩余的元素进行值初始化 T
,或者完全匹配例如T const&
; 要么将违规转化为硬错误(再次使用static_assert
)或软错误(再次使用SFINAE)