我有一个带有构造函数的模板类,我想在其中明确禁止使用定义明确的列表之外的任何类型,如下所示:
template<typename Anything>
class MyClass
{
public:
MyClass(int &);
MyClass(float &);
MyClass(Anything &) = delete;
}
但是,由于整数和双精度版本的代码是相同的,只是类型不同,所以我想使用模板化版本来定义它,例如:
template<typename Anything>
MyClass<Anything>::MyClass(Anything &var)
{
/* Code that operates over var */
...
}
而实际上不必为两个有效的构造函数复制代码。
但是,当我尝试这样做时,我得到:
error: redefinition of 'MyClass<Anything>::MyClass(Anything&)'
它通过删除"= delete"起作用。
有没有办法使用模板来定义函数但没有明确允许接收比也明确描述的类型更多的类型?
我检查了如何防止函数模板中的隐式转换?还有为什么我可以阻止基元而不是用户定义类型的隐式转换?,但他们的问题似乎并不等同于当前的问题。
非常感谢。
更新:使用 gcc-4.8.5,它可以工作!!!即使包含= delete关键字。