Nob*_*ody 3 c++ variadic-templates c++11
我正在用C++培训我的模板技能,并希望实现一个矢量类.该类由向量维N和类型T定义.现在我想要一个构造函数,它完全采用类型为T的N个变量.但是我无法理解如何告诉可变参数模板只接受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];
};
Run Code Online (Sandbox Code Playgroud)
此示例使用完美转发,并且static_assert如果没有将完全Size参数传递给构造函数,则生成硬错误.这可以调整:
std::enable_if(触发SFINAE)将硬错误转换为软错误; 我不推荐它sizeof...(U) <= Size,将剩余元素初始化为值T或完全匹配,例如T const&; 将违规转为硬错误(static_assert再次使用)或软错误(再次使用SFINAE)| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |