6

信息

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

代码看起来像

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

我也尝试了类似“专门化”别名的方法,但编译器在那里犹豫不决。

问题

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

动机

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

4

1 回答 1

12

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

myalias<> MyStructWithDouble; // compiles
于 2013-07-02T10:22:37.900 回答