【发布时间】:2018-08-02 15:48:29
【问题描述】:
考虑以下函数 (myfct)。当此函数返回时,数据指向 uint16_t、float_t 或 double_t。
在 main() 中,这个函数在 for 循环中被调用。我希望每次迭代都使用它指向的类型将“数据”保存在 std::vector 中。我怎样才能做到这一点?提前致谢。
PS:容器不一定是向量,可以是其他任何东西,我只是想保存“数据”而不丢失指针类型信息。
void myfct(void*&data, int id) {
if(id==1) {
uint16_t* ptr = ...;
data = ptr;
}
else if(id==2) {
float_t* ptr = ...;
data = ptr;
}
else if(id==3) {
double_t* ptr = ...;
data = ptr;
}
}
int main()
{
void* dataPtr = nullptr;
vector<?> myVec; //how should I template my vector? which typename?
for(int i = 0, i<5, i++)
{
myfct(dataPtr , i); //note that dataPtr is passed by reference
myVec.push_back(dataPtr ); //here dataPtr point to either uint16_t,
//float_t or double_t. I want to save it with the type it point to.
}
}
【问题讨论】:
-
你想要的是
std::variant或std::any。 -
每当您在 C++ 中使用
void *时,您很可能做错了。 -
一个
std::vector只能保存一个类型的数据。 -
@Gaetan “每个容器一个类型”位适用于所有标准容器,而不仅仅是
vector。如果您想要多种类型,请使用多个容器(或variant或any的容器,如 Nathan 建议的那样)。 -
我想用它指向的类型保存它。您可能需要 3 个向量,每个类型一个。