如何让来自不同类的内联函数相互调用

How to let inline functions from different classes call each other

本文关键字:函数 调用 同类      更新时间:2023-10-16

为了使一些核心代码尽可能快地运行,我想内联三个函数,它们分别属于两个类。

理想情况下,我想将它们定义为:

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

我知道如果我像上面那样简单地编码是不可能的。我的问题是:有没有办法,我们可以做类似的事情?至少,让他们跑得越快越好。谢谢!

您可以在类定义之外定义函数,并且仍然可以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函数的代码,但从语法的角度来看,它们很好。

如果您想从类外呼叫成员,则必须公开成员。

必须在调用函数

的位置之前定义调用的函数。 您可以通过在类外定义一些函数来实现这一点:

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 关键字。