信息
我正在尝试使用模板别名来提高代码的可读性。理想情况下,我希望别名有一个默认参数,这样如果我省略了模板,它就会使用默认值(完全使用模板函数和模板类)。
代码看起来像
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
但它似乎忽略了这一点。
我也尝试了类似“专门化”别名的方法,但编译器在那里犹豫不决。
问题
如果我们不允许使用它,为什么编译器会接受定义中的默认值?其次,有没有办法实现这一点?
动机
这个例子非常简单,但在我的真实代码中,别名会节省大量输入(模板参数不止一个)