gpt4 book ai didi

c++ - 模板类成员函数之间的循环依赖

转载 作者:行者123 更新时间:2023-11-30 01:13:52 26 4
gpt4 key购买 nike

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

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() {};
}

现在我知道第一个响应将是“更改您的代码”,但我正在试验一些东西,这是我能看到的让它起作用的唯一方法。所以我对以上在 C++ 中是否完全可行感兴趣。非常感谢!

最佳答案

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

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() {}

关于c++ - 模板类成员函数之间的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31015150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com