模板类成员函数之间的循环依赖关系

时间:2015-06-23 23:27:13

标签: c++ templates

给定两个模板类,每个模板类都有成员函数,这些函数引用其他类中的成员函数,如何做到这一点?如果有的话。通过使用前向声明来允许循环依赖,意味着定义不可用于引用的成员函数。因此,出现了关于未定义类型的隐式实例化的错误。成员函数的定义不能被推送到cpp文件,包含完整的类定义而不是前向声明,因为它必须存在于头中以允许编译器在使用/调用时实例化。

template<typename T>
class A {
    void foo(B &b) { b.bar(); };
    void bar() {};
}

template<typename T>
class B {
    void foo(A &a) { a.bar(); };
    void bar() {};
}

现在我知道第一个响应是&#34;更改你的代码&#34;,但我正在试验一些东西,这是我能看到的唯一方法。所以我对C ++中的上述内容是否完全感兴趣。 非常感谢提前!

1 个答案:

答案 0 :(得分:5)

在定义另一个模板之前声明一个模板:

template <typename> class B;

template <typename T> class A {
    inline void foo(B<T> &b);
    inline void bar();
};

template <typename T> class B {
    void foo(A<T> &a) { a.bar(); }
    void bar() {}
};

template <typename T> void A<T>::foo(B<T> &b) { b.bar(); }
template <typename T> void A<T>::bar() {}