파생 된 모든 유형 및 템플릿 생성자에 대해 생성자를 정의 할 수 있습니까? 나는 내 문제를 설명하기 위해이 테스트 케이스를 작성했습니다 :생성자 우선 순위 변경
#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
있습니다. 방금 예를 들어 답을 업데이트했습니다. –
와우. 그것은 SFINAE 때문에 작동합니다 (값은 Variant에서 파생 된 유형에 대해 정의되지 않았습니다)? – cytrinox