我正在尝试使用 C++11 实现广义的 n 维 vector 类。理想情况下,我想提供 vector 的类型“T”和维数“n”,并让构造函数接受适当数量的参数。
不幸的是,我一直无法找到一种方法来允许参数包的模板指定的固定长度。
我要找的是类似的东西
template<typename T, size_t n>
class Vector {
public:
Vector(T... values /* values is exactly n parameters long */);
...
};
这有可能吗?
最佳答案
好吧,你可以使用 std::enable_if:
template <typename... Args,
typename = typename std::enable_if<
sizeof...(Args) == n
>::type>
explicit Vector(Args&&... values) : _data{ std::forward<Args>(values)... } {}
它会隐藏可以接受除 n 以外的 Args 大小的构造函数。
关于c++ - C++11 中的固定长度可变参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661902/