有两个 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();
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.