C++的构造函数可以是模板吗?

7

我有一个没有模板的类,但是构造函数是用模板实现的。这段代码在我的环境下可以编译通过。但是我记得我曾经看到过有人说构造函数不能是模板。请问有人能解释一下这种用法是否有效吗?

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;
}

感谢您,Gokul。

1
事实上,所有的STL容器都至少有一个模板化构造函数。(它接受任何兼容迭代器类型的两个迭代器。) - sbi
2个回答

13

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


4
第二句话让我理解你的意思用了2分钟 :) - chester89
1
最好说“复制构造函数不能成为模板成员”。 - John Dibling

12

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接