좋아요, 먼저 샘플 코드를 입력하십시오. 이 컴파일되지 않지만이, 그것이 내가 할 노력하고있어 것입니다 무엇을 전달하려고 시도한 것이다 :특수 버전을 사용하여 여러 개의 상속 된 템플릿 함수 재정의
#include <iostream>
template <class T>
class Base
{
public:
virtual void my_callback() = 0;
};
class Derived1
: public Base<int>
, public Base<float>
{
public:
void my_callback<int>()
{
cout << "Int callback for Derived1.\n";
}
void my_callback<float>()
{
cout << "Float callback for Derived\n";
}
};
class Derived2
: public Base<int>
, public Base<float>
{
public:
void my_callback<int>()
{
cout << "Int callback for Derived2.\n";
}
void my_callback<float>()
{
cout << "Float callback for Derived2\n";
}
};
int main()
{
{
Derived1 d;
Base<int> * i_p = d;
Base<float> * i_f = d;
i_p->my_callback();
i_f->my_callback();
}
{
Derived2 d;
Base<int> * i_p = d;
Base<float> * i_f = d;
i_p->my_callback();
i_f->my_callback();
}
//Desired output:
// Int callback for Derived1.
// Float callback for Derived1
// Int callback for Derived2.
// Float callback for Derived2
system("Pause");
}
그래서를, 난 할 노력하고있어 상속 래퍼 클래스의 종류를 확인하는 것입니다 이로부터 파생 클래스를 다양한 콜백리스트에 자동으로 연결합니다. 파생 클래스의 특정 인스턴스를 목록에 연결해야하며 "사용자"가 파생 클래스를 만드는 과정에서 콜백 함수를 만들도록하고 싶습니다.
다른 구문을 사용해야 할 수도 있지만 작동해야하는 것처럼 보입니다. 작동하지 않는 경우 제안 사항이 있습니까?
컴파일되지 않습니다 (gcc). Derived :: my_callback의 선언은 그렇게 작동하지 않습니다. – Frunsi
이 작품은 나를 위해; 참고로 Visual Studio 2008을 사용하고 있는데 표준이 아닌 몇 가지 기능이 있습니다. 감사! – Narfanator
네, 이는 명시 적 인터페이스 구현을 지원하는 부작용입니다. MSVC를 계속 사용할 수만 있다면 괜찮을 것입니다. –