信息
我正在尝试使用模板别名来提高代码的可读性。理想情况下,我希望别名有一个默认参数,这样如果我省略模板,它就会使用默认值(完全使用模板函数和模板类)。
代码看起来像
template<typename T = double>
struct mystruct {};
template<typename T = double> using myalias = mystruct<T>;
int main(void) {
myalias MyStructWithDouble; // causes compilation error
myalias<int> MyStructWithInt;
return 0;
}
编译器(在本例中为g ++ 4.7)非常满意在别名定义中包含= double
,但它似乎忽略了这一点。
我尝试了类似“专门化”别名的东西,但是编译器却没有。
问题
如果我们不允许使用它,编译器为什么接受定义中的默认值?其次,有没有办法实现这个目标?
动机
这个例子非常简单,但在我的真实代码中,别名可以节省大量的输入(有多个模板参数)
答案 0 :(得分:10)
就像使用类模板一样,您仍然需要提供一个空模板参数列表:
myalias<> MyStructWithDouble; // compiles