2010-11-06 3 views
0
template <class T> 
void foo(T arg) { 
    T var = arg; 
} 

Возможно ли это? У меня подобная ситуация, и я не могу заставить что-то подобное работать.Объявление переменных с заданным шаблоном типа

спасибо.

+1

Если вы пытаетесь создать экземпляр Т он будет работать. Но если вы попытаетесь ввести в действие T :: iterator или T :: your_random_typedef, это не произойдет. Вам нужно использовать 'typename T :: your_random_typedef my_variable;' если вы хотите объявить его. – BatchyX

ответ

4

Да, выше работает отлично, так как это минимальный компилируемый пример:

template <class T> 
void foo(T arg) 
{ 
    T var = arg; 
} 

int main() 
{ 
    foo(23); 
    return 0; 
} 

Проблема должна быть в другом коде вы еще не писал :)

+0

Спасибо, я понял, что проблема будет в другом месте. –

4

Да, можно и будет работать, если T скопируется. Это может не работать, если T является классом, который имеет частный конструктор копирования:

class Noncopyable { 
private: 
    Noncopyable(const Noncopyable&); 

public: 
    Noncopyable() {} 
}; 

template <class T> 
void foo(T arg) { 
    T var = arg; 
} 

int main() 
{ 
    foo(Noncopyable()); 
} 
Смежные вопросы