2015-06-01 2 views
0

У меня есть код, где я хочу шаблонное определение типа во-класса для удобства чтения:Typedef аргумента шаблона

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?

ответ

5

templateClass не тип; это шаблон типа. Вам необходимо использовать ключевое слово template при определении шаблонных функций с ним.

template<int A, int B> 
void aFunction(templateClass<A, B>& tc); 
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.

Смежные вопросы