有两个 A、B 两个抽象类分别派生出几个类,我想在一类中加一个指针指向另一类的实例。大致代码如下:
class parentA { public: virtual void func() = 0; parentB* ptrToAnother; // here }; class classA1 : public parentA { public: void func() override; }; class classA2 : public parentA { public: void func() override; }; class parentB { public: virtual void func() = 0; parentA* ptrToAnother; // here }; class classB1 : public parentB { public: void func() override; }; class classB2 : public parentB { public: void func() override; }; classB1 b1; classA1 a1; a1.ptrToAnother = &b1; b1.ptrToAnother = &a1; a1.ptrToAnother->func(); b1.ptrToAnother->func(); 这样就可以通过 ptrToAnother 指针访问另一个类。但是想换成模板实现就爆炸了:
template<typename AnotherClassName> class parentA { public: virtual void func() = 0; AnotherClassName* ptrToAnother; // here }; template<typename AnotherClassName> class classA1 : public parentA<AnotherClassName> { public: void func() override; }; template<typename AnotherClassName> class classA2 : public parentA<AnotherClassName> { public: void func() override; }; template<typename AnotherClassName> class parentB { public: virtual void func() = 0; AnotherClassName* ptrToAnother; // here }; template<typename AnotherClassName> class classB1 : public parentB<AnotherClassName> { public: void func() override; }; template<typename AnotherClassName> class classB2 : public parentB<AnotherClassName> { public: void func() override; }; // 不能编译,缺少模板参数 classA1<classB1> a1; classB1<classA1> b1; a1.ptrToAnother->func(); b1.ptrToAnother->func(); 
