원하는 작업 : 가능한 한 일반적인 일반 템플릿으로 정의 된 간단한 저장소 클래스. 이 클래스에서 다른 클래스를 파생시킬 수 있다면 아무 것도 받아 들일 수 없으므로 int
(알고리즘은 여기에서 관련이 없습니다)으로 변환하고 기본 클래스에 저장합니다.다른 서명을 가진 다형성과 오버로드 된 함수
그러나 이것은 예상대로 작동하지 않습니다.
template<typename T>
class A {
public:
void f(T& foo) { }
};
class B : public A<int> {
public:
template<typename T>
void f(T& foo) { }
};
int main() {
A<int>* ptr = new B;
ptr->f("foo");
delete ptr;
return 0;
}
은 물론,이 작동하지 않습니다 다음은 최소한의 테스트 내가 쓴 경우이다
[email protected]:~/Workspace/Test/src$ icpc -o Test Test.cpp
Test.cpp(16): error: a reference of type "int &" (not const-qualified) cannot
be initialized with a value of type "const char [4]"
ptr->f("foo");
^
compilation aborted for Test.cpp (code 2)
는 B 클래스에서 메소드 정의를 사용하도록 컴파일러에 강제 할 수있는 방법이 있습니다, 또는 이건 정말 나쁜 생각인가요?
은 -
편집 : 상속 공개.
도움이되는 설명 주셔서 감사합니다. 분명히, 나는 조금 더 생각해야 할 것이다 ... – Pierre