具有默认值的模板别名

时间:2013-07-02 10:19:48

标签: c++ c++11 template-aliases

信息

我正在尝试使用模板别名来提高代码的可读性。理想情况下,我希望别名有一个默认参数,这样如果我省略模板,它就会使用默认值(完全使用模板函数和模板类)。

代码看起来像

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,但它似乎忽略了这一点。

我尝试了类似“专门化”别名的东西,但是编译器却没有。

问题

如果我们不允许使用它,编译器为什么接受定义中的默认值?其次,有没有办法实现这个目标?

动机

这个例子非常简单,但在我的真实代码中,别名可以节省大量的输入(有多个模板参数)

1 个答案:

答案 0 :(得分:10)

就像使用类模板一样,您仍然需要提供一个空模板参数列表:

myalias<> MyStructWithDouble; // compiles