小编Sas*_*hra的帖子

std :: array派生类聚合初始化

我正在制作一个源自的小助手类std::array.显然,构造函数不会继承,而是负责大括号初始化的构造函数; 例如:

template<typename T, size_t size>
struct foo : std::array<T,size>
{
     foo(int a, int b)
     : std::array<T,size>{a,b}
     {
          //nothing goes here since constructor is just a dummy that 
          //forwards all arguments to std::array constructor
     }
}

int main()
{
     foo<int,2> myobj = {1,2}; //brace initialization calls custom constructor with inner elements as arguments
}
Run Code Online (Sandbox Code Playgroud)

参数的数量必须完全匹配,所以我倾向于在构造函数中使用类似variadic函数的参数(因为我不仅每次都在数组中使用2个元素).使用这个,我如何将可变参数包转发给std::array构造函数?我对其他支持初始化方法持开放态度,允许转发给std::array构造函数.

注意:std::initializer_list需要运行时初始化,我正在寻找编译时/ constexpr兼容方法.谢谢.

c++ templates aggregate-initialization variadic-templates c++11

1
推荐指数
1
解决办法
271
查看次数

为什么std :: set不只是称为std :: binary_tree?

就数据结构而言,C ++中的std :: set不是真正的集合。std :: unordered_set是一个实数集,但std :: set是一个二叉搜索树,更具体地说是一棵红黑树。那么为什么将其称为std :: set?是否有一些特定功能可以将std :: set与二叉树区分开?谢谢。

c++ binary-tree set binary-search-tree data-structures

-5
推荐指数
1
解决办法
86
查看次数