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)
  • 链接地址: http://www.djcxy.com/p/66887.html

    上一篇: C++ Templates variadic but static

    下一篇: Create static array with variadic templates