【问题标题】:Declaring variables with template defined type使用模板定义类型声明变量
【发布时间】:2011-05-06 03:11:29
【问题描述】:
template <class T>
void foo(T arg) {
    T var = arg;
}

这可能吗?我有类似的情况,我无法让这样的事情起作用。

谢谢。

【问题讨论】:

  • 如果你试图实例化一个 T 它会工作。但是,如果您尝试实例化 T::iterator 或 T::your_random_typedef,则不会。你需要使用'typename T::your_random_typedef my_variable;'如果你想声明一个。

标签: c++ class templates compiler-errors


【解决方案1】:

是的,上面的工作正常,正如这个最小的可编译示例所示:

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

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

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

【讨论】:

  • 谢谢,我认为问题可能出在其他地方。
【解决方案2】:

是的,如果 T 是可复制的,它是可能的并且会起作用。 如果 T 是具有私有复制构造函数的类,它可能不起作用:

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

public:
    Noncopyable() {}
};

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

int main()
{
    foo(Noncopyable());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多