在没有 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++ 对象。
长话短说,我正在尝试构建一个包装器以从 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++ 对象。