gpt4 book ai didi

c++ - 我可以使用结构的 "browse"成员来简化 BDD 类的构建吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:38 25 4
gpt4 key购买 nike

我正在构建一个自定义 BDD 类来存储不同类型的数据(例如,longchar*double,...我的程序。

为了存储数据,我需要为每个表创建一个结构,如下所示:

struct MYSTRUCT0
{
char variable0[10];
char variable1[70];
};
struct MYSTRUCT1
{
long variable0;
long variable1;
char variable2[6];
double variable3;
};

但是每次我需要一个新表时都需要做很多工作,因为我需要编写一个函数来将每个表保存在一个文件中、读取它等等。更糟糕的是,它并不是真正面向对象的。

所以我的问题是,有没有办法“浏览”结构以简化我的代码?像这样:

for(int v=0; v<arraysize; v++)
for(int i=0; i<MYSTRUC0.length; i++)
{
if (MYSTRUCT.getvar(i).type == long)
DoSomethingForLong(myarray(v).getval(i));

if (MYSTRUCT.getvar(i).type == char*)
DoSomethingForCharPtr(myarray(v).getval(i));
}

我知道这样的代码可以直接在 C++ 中运行。我只是用它来说明我的意思。

最佳答案

下面的代码只是一个示例,说明如何制作您自己的“可变类型感知”结构,这可能是您想要的:

#include <vector>

enum MyTypes
{
LONG,
CHARPTR,
DOUBLE,
} myTypes;

struct MyStruct
{
MyStruct(long longVar)
{
variable.longVar = longVar;
whichType = LONG;
}

MyStruct(char* charPtr)
{
variable.charPtr = charPtr;
whichType = CHARPTR;
}

MyStruct(double var)
{
variable.var = var;
whichType = DOUBLE;
}

~MyStruct()
{
}

MyTypes whichType;
union {
long longVar;
char* charPtr;
double var;
} variable;
};

void DoSomethingForLong(MyStruct* doubleStruct)
{
/*Do something specific to long*/
};

void DoSomethingForCharPtr(MyStruct* doubleStruct)
{
/*Do something specific to char pointer*/
};

void DoSomethingForDouble(MyStruct* doubleStruct)
{
/*Do something specific to double*/
};

int main()
{
std::vector<MyStruct*> myVec;

// add a struct with long variable
long longVar = 2000000000;
MyStruct* myLongStruct = new MyStruct(longVar);
myVec.push_back(myLongStruct);

// add a struct with char pointer
char* charArray = new char[1000];
MyStruct* myCharPtrStruct = new MyStruct(charArray);
myVec.push_back(myCharPtrStruct);

// add a struct with double variable
double doubleVar = 200.200;
MyStruct* myDoubleStruct = new MyStruct(doubleVar);
myVec.push_back(myDoubleStruct);

for (int i = 0; i < myVec.size(); ++i)
{
MyStruct* tempStruct = myVec[i];
if (tempStruct->whichType == LONG)
{
DoSomethingForLong(tempStruct);
}
else if (tempStruct->whichType == CHARPTR)
{
DoSomethingForCharPtr(tempStruct);
}
else if (tempStruct->whichType == DOUBLE)
{
DoSomethingForDouble(tempStruct);
}
}

if (myLongStruct)
{
delete myLongStruct;
myLongStruct = nullptr;
}

if (myCharPtrStruct)
{
if (charArray)
{
delete[] charArray;
charArray = nullptr;
}

delete myCharPtrStruct;
myCharPtrStruct = nullptr;
}

if (myDoubleStruct)
{
delete myDoubleStruct;
myDoubleStruct = nullptr;
}
}

关于c++ - 我可以使用结构的 "browse"成员来简化 BDD 类的构建吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46729741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com