c++中与内联函数的相互包含
Mutual inclusion with inline function in C++
我想写一些这样的代码:一个A
对象调用它的类B
类型成员b
的成员函数DoSomething
,在B
类的DoSomeOtherThing
成员函数中调用A
的Notify
成员函数。请看下面的代码:
A类:
class A
{
B b;
public:
A() : b(*this)
{
}
void DoSomething()
{
b.DoSomething();
}
void Notify()
{
}
};
B类:
class B
{
A &a;
public:
B(A &a) : a(a)
{
}
void DoSomething()
{
}
void DoSomeOtherThing()
{
a.Notify();
}
};
问题是我想保持函数内联,所以代码应该在头文件中。我不能简单地包含彼此,因为它们可能会导致相互包含,而且我不知道在这种情况下是否可以使用前向声明。我可以在源文件中编写实现,但它们不会是内联函数。那么,我怎样才能使代码工作呢?
您可以将成员函数的定义移出类定义,并且仍然保持它们内联(因此在头文件中),方法是显式地使用inline
作为其类外定义的前缀。完成这些之后,您会注意到
-
B
的类定义可以很容易地移动到A
的成员函数定义之前,解决了从这些成员访问B
的问题,并且 -
A
的类定义只需要前向声明B
,所以在A
的定义之前添加class B;
解决了这个问题。
做这两个改变就足以解决你的问题。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- g++ 说函数不存在,即使包含正确的标头
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 如果基类包含双指针成员,则派生类的构造函数
- C++包含函数标头会给出错误'__dest'未命名类型
- 为什么不在 c++ 容器中实现包含函数
- 如何创建用于多个源文件的全局变量/包含/函数
- 是否可以在 C++ 中使用运算符重载来更改(未修改的)包含函数的含义
- C++中包含函数定义的内容
- 包含C++函数指针的映射
- C++从包含函数名称的 char * 调用函数
- 使用包含函数名称的字符串调用函数
- 头文件中包含函数
- 在基类中,如何定义一个容器来包含函数obj,它可以是派生类的任何函数
- C++包含函数原型的保护程序
- c++传递一个.txt文件,其中包含函数名和参数
- 如何清除包含C函数声明的字符串中的注释和中间空白
- 类的向量包含函数
- 用于包含函数的C宏
- 在c++中包含函数的麻烦