Typedef一个模板参数

时间:2015-06-01 21:57:59

标签: c++ templates c++11

我有代码,我想键入一个模板化的类以便于阅读:

template<int A, int B>
using templateClass = templateClass<A,B>;

void aFunction(templateClass& tc);

int main(){
    templateClass<10, 34> tc;
    aFunction(tc);
}

void aFunction(templateClass& tc){
    ...
}

但是我发现很多关于未找到模板标识符的错误。该怎么做?我试图效仿这个例子:

How to typedef a template class?

2 个答案:

答案 0 :(得分:5)

templateClass不是一种类型;这是一个类型模板。在使用它定义模板化函数时,您仍然需要使用template关键字。

template<int A, int B>
void aFunction(templateClass<A, B>& tc);

答案 1 :(得分:5)

如果您事先只知道某些模板参数,别名模板非常有用:

template <class Value>
using lookup = std::map<std::string, Value>;

lookup<int> for_ints;
lookup<double> for_doubles;

在您的情况下,您不清楚是否需要为类模板使用其他名称:

template <class A, class B>
class templateClass;

template <class A, class B>
using otherName = templateClass<A, B>;

如果您已经知道所需的类型:

typedef templateClass<int, double> int_double;

或者你只知道一种类型:

template <class B>
using with_int = templateClass<int, B>;

在任何情况下,您都不能拥有与类同名的别名,就像您为templateClass所做的那样。