如何模拟C数组初始化“int arr[]={e1,e2,E3,…}“行为与STD:数组?
它独特的初始化特性:
int arr[] = { 1, 3, 3, 7, 0, 4, 2, 0, 3, 1, 4, 1, 5, 9 };
std::begin
std::end
<iterator>
(或者你自己的变体
现在,是否有任何方法(可能是TMP)来实现与std::array?使用宏可以使它看起来更好看。*)
??? std_array = { "here", "be", "elements" };
编辑*根据各种答案汇编的中间版本如下:
#include <array>
#include <utility>
template<class T, class... Tail, class Elem = typename std::decay<T>::type>
std::array<Elem,1+sizeof...(Tail)> make_array(T&& head, Tail&&... values)
{
return { std::forward<T>(head), std::forward<Tail>(values)... };
}
// in code
auto std_array = make_array(1,2,3,4,5);
并使用了所有酷C+11的东西:
可变模板
sizeof...
rvalue引用
完美转发
std::array当然,
均匀初始化
忽略具有一致初始化的返回类型
类型推断(auto)
不过,正在对@Xaade的答案的注释中指出的那样,您不能用这样的函数初始化嵌套类型。例子:
struct A{ int a; int b; };
// C syntax
A arr[] = { {1,2}, {3,4} };
// using std::array
??? std_array = { {1,2}, {3,4} };
此外,初始化器的数量仅限于实现支持的函数和模板参数的数量。
明月笑刀无情
慕斯王
相关分类