【问题标题】:Can C++ Constructors be templates?C++ 构造函数可以是模板吗?
【发布时间】:2011-02-11 09:53:52
【问题描述】:

我有一个带有模板化构造函数的非模板类。这段代码为我编译。但我记得在某处我曾提到构造函数不能是模板。有人可以解释这是否是有效的用法吗?

typedef double Vector;

//enum Method {A, B, C, D, E, F};
struct A {};

class Butcher
{
public:
 template <class Method>
 Butcher(Method);


private:
 Vector a, b, c;
};

template <>
Butcher::Butcher(struct A)
: a(2), b(4), c(2)
{
 // a = 0.5, 1;
 // b = -1, 1, 3, 2;
 // c = 0, 1;
}

谢谢, 悟空。

【问题讨论】:

  • 事实上,所有的 STL 容器都至少有一个模板化的构造函数。 (这是一个接受任何兼容迭代器类型的两个迭代器。)

标签: c++ templates constructor


【解决方案1】:

构造函数是模板成员是完全有效的。我认为您可能会想到的唯一一件事是模板构造函数永远不是复制构造函数,因此模板构造函数本身不会阻止编译器生成的复制构造函数的生成。

【讨论】:

  • 花了2分钟才明白你第二句话的意思:)
  • 最好说“复制构造函数不能是模板成员”。
【解决方案2】:

是的,构造函数可以是模板。

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2018-12-08
    • 2011-02-21
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    相关资源
    最近更新 更多