考虑下面的代码初始化:在非集合结构
template<size_t head,size_t ... Dims> struct make_vec {
typedef typename make_vec<Dims...>::type type[head];
};
template<size_t head> struct make_vec<head> {typedef float type[head];};
template<size_t ... Dims>
struct vec {
typename make_vec<Dims...>::type _data;
};
由于类vec
是一个聚合,我可以用括号括起,初始化列表来初始化vec
。
vec<3,3> foo = {{
{1,2,3},
{4,5,6},
{7,8,9}
}};
如果我添加一个构造函数来我VEC类(例如允许使用表达式的模板,这是我的最终目标),此语法不再被允许,因为vec
不会是一个聚集了。
在这种情况下,要做的逻辑是使用std::initializer_list
;但是,当我编译使用此构造的代码时,即使启用了优化,我也会得到很长的汇编代码(我使用std::uninitialized_copy
将initializer_list复制到我的vec类数据成员中)。
我没有运用variadic模板来实现相同的结果。 初始化用户定义的固定大小多数组类型的最佳方法(即良好的运行时性能和清晰的语法)是什么?
我忘了,但另一种可能性是使您的表达式模板的类型具有隐式转换运算符。那时不需要构造函数。 – 2012-04-10 10:04:47