如何从c中访问cpp类中的结构变量?
messageStruct.hpp
class MessageStructure_t{
public:
struct MsgData_t {
float a;
int i;
}__attribute__((packed))msgdata_m;
};//classs end
我已经在我的项目Application.c文件。我需要在这里访问结构变量。 两者是不同的,一个.HPP和其他.C
我怎样才能做到这一点?
希望你的关注。
您可以定义在一个单独的头细msg_data.h的结构,然后将其包含在这两个项目。如果需要,您可能需要将MessageStructure_t指针指向MsgData_t。
因此MsgData.h:
struct MsgData_t {
float a;
int i;
}__attribute__((packed));
messageStruct.hpp:
#include "MsgData.h"
class MessageStructure_t {
public:
MsgData_t msgdata_m;
}
Appliaction.c:
#include "MsgData.h"
//...
我认为最好的方式是创建一个外部“C”功能访问该结构。
但是,即使这也引发了一个问题,那就是如何将一个类实例从C. – sbi 2010-01-26 09:38:04
@sbi传递给该方法。我不确定对此有何不确定性或神秘性。你可以创建包装这些方法的'extern“C”'函数。如果需要的话,你也可以编写一个'MessageStructure_Create()'来包装'new'和构造函数,'MessageStructure_Free()'来包装'delete'。不知道该类型应该是什么?从'void *'做一个'typedef'。您可以为字段编写访问器函数。 – asveikau 2010-01-26 09:49:13
@asveikau:见http://stackoverflow.com/questions/2138337/how-to-access-a-structure-variable-which-is-inside-a-cpp-class-from-c/2138546#2138546': O)' – sbi 2010-01-26 09:56:20
当你想从C访问C++类和它们的对象,周围有几个知名的图案。谷歌为他们。
一个简单的一种是把它包在一块OO的C:
typedef void* my_handle_t;
handle_t create(void); // returns address of new'ed object
void destroy(handle_t); // deletes object
MsgData_t* get_data(handle_t); // returns address of data in object
这使得如何让MsgData_t
从C.访问的问题,我看到三种可能性:
- 举动它的定义到自己的头(IMO最好,但你已经说过你不允许这样做)
- 重复它的定义(容易,但IMO最差的替代)
- 拨弄预处理器(
#ifndef __cplusplus
),使一个C解析器的C++头访问(hackish的,但避免了#2的代码重复)
注:.HPP和.c的只是文件扩展名。您应该谈论语言,如果这是您的担心,例如“如何从C模块访问C++结构”或类似的东西。 – 2010-01-26 09:12:15
感谢您的信息我们的主席 – user46646 2010-01-26 09:16:09
如果我理解正确,您有一个C++类的实例,并且您需要从C中访问该实例的数据字段。但是这只会引出C如何访问该对象的问题?当然,C无法传递类实例。那么你在C中已经拥有了什么? – sbi 2010-01-26 09:25:23