在没有 class 实例的情况下调用 C++ class 方法?

Call a C++ class method without a class instance?

长话短说,我正在尝试构建一个包装器以从 C 主函数访问 C++ 源代码(由于嵌入式系统,我必须进行转换);但是,我无法在不创建 class.

的实例的情况下将方法从 class 调用到外部函数

我想从我的 C 代码中传递这个 *side 指针,计算它的立方,然后返回立方值。我已经用简单的指针函数和变量测试了我的包装器,它工作得很好,但是我在使用 class 方法时遇到了问题。这是我的源代码,我在最后一行犯了错误...:

class Cube
{
public:
    static int getVolume(int *side)
    {
        return *side * *side * *side;     //returns volume of cube
    }
};

void Cube_C(int *side) 
{
    return Cube.getVolume(*side);
}

您可以在没有实例的情况下调用 class 的 static 成员函数:只需添加 class 名称后跟 scope resolution operator:: ) 在成员函数名称之前(而不是 class 成员运算符 .,如您所试)。

此外,在您的 Cube_C 函数中,您应该 而不是 取消引用 side 指针,因为 getVolume 函数采用 int * 指针作为它的参数。并且您需要将该函数的 return 类型声明为 int(而不是 void):

int Cube_C(int *side) 
{
    return Cube::getVolume(side);
}

对于这个特定的示例,您根本不需要它们是 类,因为 Cube 没有状态。就做一个函数:

int Cube_Volume(int side) { return side * side * side; }

如果您希望保存状态的对象可从 C 中重用,您确实需要一个实例:

class Cube {
public:
    Cube(int side) : m_side(side) {}
    int getVolume() const { return m_side * m_side * m_side; }

private:
    int m_side;
};

然后在你的C接口中:

extern "C" int Cube_Volume(int side) { return Cube(side).getVolume(); }

编辑:我在 github 添加了一个更详细的示例来展示如何创建 C 函数来创建和操作 C++ 对象。