如何获取不完整类型的typeid C ++
how to get typeid of incomplete type c++
我需要以这样一种方式存储指针,以便以后能够恢复它的原始类型并做一些事情。
vector<pair<void*, type_info>> pointers;
以后
for(auto p : pointers){
switch(p.second)
case typeid(sometype):
DoStuff((sometype*)p.first);
break; //and so on...
}
当我添加指针时,我自然会这样做
SomeType* pointer;
pointers.emplace_back((void*)pointer, typeid(SomeType));
在类型不完整之前,它工作正常。
typeid
不适用于不完整的类型,因此我不能将它与(例如)SDL2
库中的 SDL_Texture
一起使用。但是我需要以某种方式将不同的类型彼此区分,即使它们中的一部分是不完整的。怎么办?
使用std::any
.
您的案例的一些示例:
#include <vector>
#include <any>
std::vector<std::any> pointers;
SomeType *pointer;
pointers.emplace_back(std::make_any<SomeType*>(pointer));
/* later on */
for (auto p : pointers) {
if (SomeType *t = std::any_cast<SomeType*>(p))
/* p is of type SomeType* */
else if (...)
/* check other types */
}
我需要以这样一种方式存储指针,以便以后能够恢复它的原始类型并做一些事情。
vector<pair<void*, type_info>> pointers;
以后
for(auto p : pointers){
switch(p.second)
case typeid(sometype):
DoStuff((sometype*)p.first);
break; //and so on...
}
当我添加指针时,我自然会这样做
SomeType* pointer;
pointers.emplace_back((void*)pointer, typeid(SomeType));
在类型不完整之前,它工作正常。
typeid
不适用于不完整的类型,因此我不能将它与(例如)SDL2
库中的 SDL_Texture
一起使用。但是我需要以某种方式将不同的类型彼此区分,即使它们中的一部分是不完整的。怎么办?
使用std::any
.
您的案例的一些示例:
#include <vector>
#include <any>
std::vector<std::any> pointers;
SomeType *pointer;
pointers.emplace_back(std::make_any<SomeType*>(pointer));
/* later on */
for (auto p : pointers) {
if (SomeType *t = std::any_cast<SomeType*>(p))
/* p is of type SomeType* */
else if (...)
/* check other types */
}