template <class T>
void foo(T arg) {
T var = arg;
}
Возможно ли это? У меня подобная ситуация, и я не могу заставить что-то подобное работать.Объявление переменных с заданным шаблоном типа
спасибо.
template <class T>
void foo(T arg) {
T var = arg;
}
Возможно ли это? У меня подобная ситуация, и я не могу заставить что-то подобное работать.Объявление переменных с заданным шаблоном типа
спасибо.
Да, выше работает отлично, так как это минимальный компилируемый пример:
template <class T>
void foo(T arg)
{
T var = arg;
}
int main()
{
foo(23);
return 0;
}
Проблема должна быть в другом коде вы еще не писал :)
Спасибо, я понял, что проблема будет в другом месте. –
Да, можно и будет работать, если T скопируется. Это может не работать, если T является классом, который имеет частный конструктор копирования:
class Noncopyable {
private:
Noncopyable(const Noncopyable&);
public:
Noncopyable() {}
};
template <class T>
void foo(T arg) {
T var = arg;
}
int main()
{
foo(Noncopyable());
}
Если вы пытаетесь создать экземпляр Т он будет работать. Но если вы попытаетесь ввести в действие T :: iterator или T :: your_random_typedef, это не произойдет. Вам нужно использовать 'typename T :: your_random_typedef my_variable;' если вы хотите объявить его. – BatchyX