상속 및 템플릿 메서드에 대한 질문이 있습니다. 내가 컴파일러는 파생 :: 인쇄 (표준 : : 문자열 &) '' '에 대한 호출에 일치하는 기능을' '나에게 알려줍니다템플릿 메서드의 상속
class Base
{
public:
template<typename T>
void print(const T& s) {std::cout << "Base (templated) prints " << s << "\n";}
virtual void print(int i) {std::cout << "Base prints " << i << "\n";}
};
class Derived : public Base
{
public:
void print(int i) {std::cout << "Derived prints " << i << "\n";}
}
int main()
{
Derived d;
d.print(3); // works fine
std::string s = "hi";
d.print(s); // does not compile
return 0;
}
이 두 개의 클래스가 있다고 가정. 그러나 Derived에서 Base를 상속받은 경우 템플릿 메서드 print (..)에 대한 호출도 허용해야합니다. 아니요?
필자가 파생 클래스에서 "print"메서드를 정의하지 않으면 모든 것이 잘 작동하고 컴파일러에서 기본 클래스 템플릿 메서드를 호출합니다. 나는 기본 클래스 중 하나를 호출하는 파생 클래스, 또한 템플릿 방법을 정의하는 경우
것 또한 잘 작동,하지만 ... 나에게 당신의 도움에 대한
감사를 마우스 오른쪽 보이지 않는다.
좋아요, 내가 수정하지 않은 몇 가지 특별한 이유가 있습니다. 질문을 단순화하려고했지만 가상 기능과 같은 중요한 세부 사항을 생략했을 수도 있습니다. – bartgol