使用模板定义的类型声明变量

时间:2010-11-06 20:54:45

标签: c++ class templates compiler-errors

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

这可能吗?我有类似的情况,我不能得到这样的东西。

谢谢。

2 个答案:

答案 0 :(得分:4)

是的,上面的工作正常,因为这个最小的可编辑示例显示:

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

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

问题必须出在您尚未发布的其他代码中:)

答案 1 :(得分: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());
}