将CPP类(.CPP文件)转换为C结构(.c File)
convert a cpp class(.cpp file) into a c structure (.c file)
我有一个名为coverage的类。
此类用于其他标题文件中。我想将类转换为C 结构。其他标题文件正在使用函数中的类对象。我想在外面更改类,我不必在其他标头文件中进行更改。
像该功能是
string ABC(Coverage* coverage);
我的结构应该作为行为班级工作;但是无法在结构中创建功能,因为它不建议在c。
中使用。class Coverage
{
std::string country;
std::string KpRuntimeDir();
std::string CRtimeDir();
std::string RtimeDir();
};
将类转换为:
struct Coverage n{
char country[];
/* [...] */
};
我想到的唯一方法是将类重写为结构(仅变量成员),并在结构之外定义函数(而不是方法)。但是,如果您既有私有方法和公共方法,则有一些固定的构造函数,那么它似乎毫无意义,您将永远无法获得相同的安全性和功能。
struct Coverage{
char country[256];
--------
};
char* RtimeDir(Coverage* c);
,但在这种情况下,可以用任何铸造的指针调用,这些指针会导致运行时错误。
您应该声明extern "C"
结构并将Coverage
的实例转换为一个:
extern "C" {
struct CoverageAsACStruct
{
char country[SOME_DEFINED_CONSTANT_COUNTRY];
char KpRuntimeDir[SOME_DEFINED_CONSTANT_RUNTDIR];
char CRtimeDir[SOME_DEFINED_CONSTANT_CRTIMEDIR];
char RtimeDir[SOME_DEFINED_CONSTANT_RTIMEDIR];
};
}
class Coverage
{
std::string country();
std::string KpRuntimeDir();
std::string CRtimeDir();
std::string RtimeDir();
void buildCStructure( struct CoverageAsACStruct* dst ) const;
};
void Coverage::buildCStructure( struct CoverageAsACStruct* dst ) const
{
std::string cached_country = country();
if (cached_country.size()+1 > sizeof(dst->country))
// error?
// same for other fields
::strcpy(dst->country, cached_country.c_str());
// same for other fields
}
每当您需要将Coverage
实例(我们称为cov
)传递给C函数f()
时,将其传递:
struct CoverageAsACStruct ccov;
cov.buildCStructure(&ccov);
f(&ccov);
您甚至可以将其嵌入Coverage
的成员功能。
我也不确定您为什么要这样做,但是您也可以通过函数指针(但更喜欢有条件的汇编)来执行此操作,毕竟所有C 均已在C中实现。在以下代码中,我尝试这样做,通过使用函数指针将函数添加到C结构中。
。#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
class Someclass{
string some_str;
public:
string get();
void set(string str);
};
*/
struct SomeStruct;
typedef char *(*Getter)(struct SomeStruct *);
typedef void (*Setter)(struct SomeStruct *, char *);
typedef void (*Initialize)(struct SomeStruct *);
typedef struct SomeStruct{
char some_chr[1024];
Getter get;
Setter set;
Initialize init;
}STR;
char * Get(STR *SStr){
return SStr->some_chr;
}
void Set(STR *SStr, char *str){
strncpy(SStr->some_chr,str,strlen(str)+1);
}
void Init(STR *STRstr){
STRstr->get = Get;
STRstr->set = Set;
}
int main(){
STR SStr,Next_str;
SStr.init = Init;
SStr.init(&SStr);
SStr.set(&SStr,"Example");
printf("%sn",SStr.get(&SStr));
Next_str.init = Init;
Next_str.init(&Next_str);
Next_str.set(&Next_str,"Next_Example");
printf("%sn",Next_str.get(&SStr));
return 0;
}
相关文章:
- 使用cpp中的结构和函数的多个学生条目
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 如何在cpp中删除(免费)多维结构内存?
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 在两个.cpp文件之间定义全局类/结构指针
- 如何大致将 cpp 代码结构转换为 python
- 标准 cpp 数据结构和线程互斥锁?
- 真的需要在 .h 和 .cpp 文件中分离 c++ 结构吗?
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 在 CPP 中初始化 typedef 结构变量
- 如何将 JSON 键值(我使用 cpp boost 解析)存储在相关数据结构中?
- CPP/C 中的常量用法和结构构造函数中的澄清
- cpp 初始值设定项太多 - 数组中的结构中的结构
- CPP 在读取结构数据时无限循环错误?
- cpp 中是否存在一种数据结构,可以轻松地提供一种基于已存在的实例构建新结构的方法
- Cython包裹CPP结构并用参数构成结构的阵列
- 如何将CPP结构中的字符串转换为Python struct
- CPP 结构内部重载 () 运算符