这本身就是一个最佳实践问题,而不是一个语言问题,因为我已经有了一个可行的解决方案来解决似乎是 C++ 中常见的绊脚石。
我正在处理模板参数替换中的典型循环依赖问题。我有以下一对类:
template<class X>
class A { /* ... */ };
template<class X>
class B { /* ... */ };
我想将每一个实例化如下:
// Pseudocode -- not valid C++.
A<B> a;
B<A> b;
也就是说,我想将 A 绑定到 B,并将 B 绑定到 A。
我可以通过带有继承技巧的前向声明以粗略的方式解决问题:
class sA;
class sB;
class sA : public A<sB> { /* ... */ };
class sB : public B<sA> { /* ... */ };
但这带来了一系列问题,因为sA
和sB
确实不是A
和B
。例如,如果A
不正确地将它们复制到sA
中,或者在代码周围以某种方式闪闪发光的类型转换,我就无法调用 's 构造函数。
我的问题是:处理这个问题的最佳实用方法是什么?这个问题有什么特别聪明的解决方案吗?
我同时使用 MSVC2008 和 G++,但欢迎使用具有编译器特定扩展的解决方案。
谢谢,
阿列克