gpt4 book ai didi

c++ - 在循环迭代期间在 vector 中保存对 void 指针的引用

转载 作者:太空宇宙 更新时间:2023-11-04 14:33:15 25 4
gpt4 key购买 nike

伙计们,我有这样的功能(这是给定的,不应修改)。

void readData(int &ID, void*&data, bool &mybool) {
if(mybool)
{
std::string a = "bla";
std::string* ptrToString = &a;
data = ptrToString;
}
else
{
int b = 9;
int* ptrToint = &b;
data = ptrToint;
}
}

所以我想在循环中使用这个函数并将返回的函数参数保存在一个 vector 中(对于每次迭代)。为此,我编写了以下结构:

template<typename T>
struct dataStruct {
int id;
T** data; //I first has void** data, but would not be better to
// have the type? instead of converting myData back
// to void* ?
bool mybool;
};

我的 main.cpp 看起来像这样:

int main()
{
void* myData = nullptr;
std::vector<dataStruct> vec; // this line also doesn't compile. it need the typename
bool bb = false;

for(int id = 1 ; id < 5; id++) {
if (id%2) { bb = true; }
readData(id, myData, bb); //after this line myData point to a string
vec.push_back(id, &myData<?>); //how can I set the template param to be the type myData point to?
}
}

或者没有模板有更好的方法吗?我用的是c++11(我不能用c++14)

最佳答案

您所说的函数不能修改,即 readData() 是应该提醒您的函数!

它导致未定义的行为,因为指针被设置为局部变量,这意味着当函数终止时,这些指针将是悬挂指针。

关于c++ - 在循环迭代期间在 vector 中保存对 void 指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50930369/

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