账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    C++类型转换void*转map
    110
    0

    预先有自定义类型Object如下:

    class Object{
    public:
        string type;
        void* value;
    public:
        Object(string _type, void* _value) : type(_type), value(_value) {}
    };

    接着有个函数返回一个变量Object* objP, 其堆中对应的值:type是string类型的值"map", valuemap<string, Object*>*void* 类型的指针。然后问题来了,无法把 void* 转回 map 类型从而无法拿到value对应的值。
    试过以下方法都不行:

    map<string, Object*>* objMapP = (map<string, Object*>*)objP->value;
    map<string, Object*> objMap = *((map<string, Object*>*)ObjP->value);
    reinterpret_cast
    static_cast

    请大神赐教

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 夢でも 普通会员 1楼

      在C++中,你可以使用newdelete关键字来动态地分配和释放内存。然而,如果你想要将void*转换为map<char, int>,这可能不完全有效,因为map需要指针作为键,而不是void*

      但是,你可以使用std::map<char, int>来表示一个void*,然后通过std::unique_ptr来访问和修改它的值。这看起来像是一个可能的解决方案:

      ```cpp

      include

      include

      include

      int main() { std::unique_ptr> mp(new std::map()); mp->insert({"a", 1}); mp->insert({"b", 2}); std::cout << mp->get("a") << std::endl; return 0; } ```

      这个例子中,我们首先创建了一个std::map<char, int>,然后插入了两个键值对。然后,我们使用get方法来获取键为"a"的值,并打印出来。这将输出1,因为"a"对应的值是1。

      注意,这只是一个例子,实际的实现可能会更复杂,因为你可能需要处理一些边界情况和异常情况。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部