gpt4 book ai didi

c++ - 使用空指针

转载 作者:行者123 更新时间:2023-11-28 03:27:12 25 4
gpt4 key购买 nike

在以下情况下,我的数据可能根据某些条件属于不同类型。

class myClass {
public:
myclass() {
if (condition1) {
bool boolValue = false;
data = boolValue;
} else if (condition2) {
int intValue = 0;
data = intValue;
} else if (condition3) {
unsigned int unsignedIntValue = 0;
data = unsignedIntValue;
} else if (condition4) {
long longValue = 0;
data = longValue;
} else if (condition5) {
double doubleValue = 0.0;
data = doubleValue;
} else if (condition6) {
float floatValue = 0.0;
data = floatValue;
} else if (condition7) {
char *buffer = new char[10];
data = buffer;
}
}

void* getData() const { return data; }

private:
void *data;
}

碰巧我的 void 指针指向的值严格地在每个语句中。因此,getData() 返回的内容可能无效。如果我确实获得了数据,那只是因为我指向的内存位置尚未被覆盖。

我想出的解决方案是这样的:

class myClass {
public:
myclass() {
if (condition1) {
boolValue = false;
data = boolValue;
} else if (condition2) {
intValue = 0;
data = intValue;
} else if (condition3) {
unsignedIntValue = 0;
data = unsignedIntValue;
} else if (condition4) {
longValue = 0;
data = longValue;
} else if (condition5) {
doubleValue = 0.0;
data = doubleValue;
} else if (condition6) {
floatValue = 0.0;
data = floatValue;
} else if (condition7) {
buffer = new char[10];
data = buffer;
}
}

void* getData() const { return data; }

private:
void *data;
bool boolValue;
int intValue;
unsigned int unsignedIntValue;
long longValue;
double doubleValue;
float floatValue;
char *buffer;
}


我在想一定有更优雅的方法来做到这一点。有什么建议吗?

最佳答案

您可以使用 union 在内存中保存一些位,然后使用指针转换从 union 中获取值:

#include<iostream>
using namespace std;

class myClass {
public:
myClass(char *str){
data.str = str;
}
myClass(double d){
data.d = d;
}
myClass(float f){
data.f = f;
}

void *getData() { return (void*)&data; }
private:
union {
double d;
float f;
char *str;
} data;
};

int main(){
myClass c(2.0);
cout << *(double*)c.getData() << endl;

myClass f(3.0f);
cout << *(float*)f.getData() << endl;

myClass s("test");
cout << *(char**)s.getData() << endl;

system("pause");
}

/* prints
2
3
test
*/

关于c++ - 使用空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13604474/

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