调用没有类实例的C ++类方法?

时间:2020-09-21 14:50:32

标签: c++ class methods instance call

长话短说,我正在尝试构建一个包装程序以从C主函数访问C ++源代码(由于嵌入式系统,我必须进行转换);但是,我无法在不创建该类实例的情况下从该类调用方法到外部函数。

我想从我的C代码中传递此*side指针,计算它的多维数据集,并获得返回的多维数据集值。我已经用简单的指针函数和变量测试了包装器,它工作得很好,但是我在使用类方法时遇到了麻烦。这是我的源代码,但是我在最后一行犯了错误...:

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

对于此特定示例,您根本不需要将它们作为类,因为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 ++对象。