长话短说,我正在尝试构建一个包装程序以从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);
}
答案 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 ++对象。