要使某些核心代码尽可能快地运行,我想使三个函数内联,它们分别属于两个类。
理想情况下,我想将它们定义如下:
class ClassB;
class ClassA {
ClassB * pB;
inline void func1() {
// do something
};
inline void func2() {
pB->func3();
};
};
class ClassB {
ClassA * pA;
inline void func3() {
pA->func1();
};
};
我知道如果我像上面那样简单地编码,那是不可能的。 我的问题是:有没有办法,我们可以做类似的事情? 至少,让它们尽可能快地运行。 谢谢!
答案 0 :(得分:4)
您可以在类定义之外定义函数,但仍inline
。
class ClassB;
class ClassA {
ClassB * pB;
void func1();
void func2();
};
class ClassB {
ClassA * pA;
void func3();
};
inline void A::func1()
{
// do something
}
inline void A::func2()
{
pB->func3();
}
inline void B::func3()
{
pA->func1();
}
我不确定编译器将如何生成用于相互引用inline
函数的代码,但是从语法角度来看,它们是好的。
答案 1 :(得分:1)
如果要从班级外部召集成员,则必须公开成员。
所调用的函数必须在调用它们之前定义。您可以通过在类之外定义一些功能来实现此目的:
class ClassB;
class ClassA
{
ClassB * pB;
public:
void func1()
{
// do something
};
void func2();
};
class ClassB
{
ClassA * pA;
public:
void func3()
{
pA->func1();
};
};
inline void ClassA::func2()
{
pB->func3();
};
还请注意,在类中定义函数时,不必使用inline
关键字。