是否可以为所有派生类型和模板构造函数定义构造函数? 我写这个的测试用例来说明我的问题:更改构造函数优先
#include <iostream>
class Variant;
class CustomVariant;
class Variant
{
public:
Variant(void)
{}
Variant(const Variant&)
{
std::cout << "ctor" << std::endl;
}
Variant(const CustomVariant&)
{
std::cout << "custom" << std::endl;
}
template<typename T>
Variant(const T&)
{
std::cout << "template" << std::endl;
}
};
class CustomVariant : public Variant
{
};
class DerivedVariantA : public CustomVariant
{
};
class DerivedVariantB : public CustomVariant
{
};
int main(void)
{
DerivedVariantB dvb;
Variant v(dvb);
// expcected output: "custom" instead of "template"
}
是的,那是标准定义的规则。问题是,有没有解决方法? :) – cytrinox 2011-04-19 18:10:57
有;我刚刚用一个例子更新了我的答案。 – 2011-04-19 18:11:18
太好了。这是因为SFINAE(价值没有定义从派生类型派生)? – cytrinox 2011-04-19 18:20:56