기본 클래스의 멤버 함수를 전문화하고 싶습니다. 그러나 컴파일되지 않습니다. 컴파일하는 대안을 아는 사람이 있습니까? 여기 상속 된 멤버 함수의 템플릿 전문화
이이Foo<char>()
에 전화를 제외하고, 컴파일
struct Base
{
template<typename T>
void Foo()
{
throw "Foo() is not defined for this type";
}
};
struct Derived : public Base
{
template<>
void Foo<int>() { cout << "Foo<int>()" << endl; } // compile error (cannot specialize members from a base class)
template<>
void Foo<double>() { cout << "Foo<double>()" << endl; } // compile error (cannot specialize members from a base class)
};
다형성 현상이 없을 것입니다. 템플릿을 가상으로 만들 수는 없습니다. 달성하고자하는 것이 확실하지 않습니다. – CashCow
우리는 특수 멤버가있는 팩토리 클래스를 만들려고 노력하고 있으며 메서드가 특수화되지 않은 유형을 처리하는 방법을 모르는 경우에는 예외를 throw하려고합니다. 예제에서 Derived와 같은 여러 클래스를 만들려고합니다. 그렇지 않으면 우리는 Base 클래스를 가지지 못했을 것입니다. – Alex
런타임에 예외를 throw하는 것보다 컴파일 타임에 실패하는 것이 더 좋습니다. – CashCow