是否可以爲所有派生類型和模板構造函數定義構造函數? 我寫這個的測試用例來說明我的問題:更改構造函數優先
#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