考虑以下设计:
template <class SecondType>
struct First
{
SecondType* _ptr;
};
template <class FirstType>
struct Second
{
FirstType* _ptr;
};
哪里First
type 有一个指向 Second
的指针类型,反之亦然。问题是我不能声明这个,因为它们是相互依赖的,我应该声明 First<Second<First<Second...>>>
.
如何解决这个问题?
最佳答案
也许可以使用类似 CRTP 的方法来解决但更疯狂的是:
#include <iostream>
template <class SecondType>
struct FirstBase
{
SecondType* _ptr;
};
template <class FirstType>
struct SecondBase
{
FirstType* _ptr;
};
struct FirstDerived
: public FirstBase<SecondBase<FirstDerived>>
{
};
struct SecondDerived
: public SecondBase<FirstBase<SecondDerived>>
{
};
int main()
{
FirstBase<SecondDerived> x;
SecondBase<FirstDerived> y;
return 0;
}
如果有人有更优雅的方法来做到这一点,我会很高兴看到它。
关于c++ - 相互依赖的类模板设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16889818/