Объявление переменных с шаблоном определенного типа - PullRequest
0 голосов
/ 06 ноября 2010
template <class T>
void foo(T arg) {
    T var = arg;
}

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

Спасибо.

Ответы [ 2 ]

4 голосов
/ 07 ноября 2010

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

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

public:
    Noncopyable() {}
};

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

int main()
{
    foo(Noncopyable());
}
4 голосов
/ 06 ноября 2010

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

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

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

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

...