微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取不完整类型c ++的typeid

如何解决如何获取不完整类型c ++的typeid

我需要以这样一种方式存储指针,以便稍后我能够恢复它的原始类型并做一些事情。

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 不适用于不完整的类型,因此我无法将它与(例如)SDL_Texture 库中的 SDL2 一起使用。但是我需要以某种方式使不同的类型彼此不同,即使其中的一部分是不完整的。怎么办?

解决方法

使用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 */
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。