c++ - C++11 中的固定长度可变参数包

标签 c++ templates gcc c++11 variadic-templates

我正在尝试使用 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/

相关文章:

c++ - 使用 libsndfile 写入 wav 文件

linux - 是否有可能在 linux 中找到哪个进程正在使用 OPENSSL?

java - 在使用命名空间 std 的 C++ 头文件上运行 SWIG 时缺少分号错误

c++ - 除以 0 警告

c++ - 当多个重载通过 SFINAE 时创建首选重载

c++ - 使用 UML 表示在 C++ 模板类中定义的 typedef

c++ - 强制模板静态成员实例化

c - 我无法构建 HELLO, WORLD 程序?

iphone - 如何在 GCC 和 Xcode 中手动引发编译器错误

c++ - 使用带有 --extract-all 的 xgettextt 处理复数