any_cast std :: any指向特定指针类型的指针 [英] any_cast std::any pointer to specific pointer type

查看:404
本文介绍了any_cast std :: any指向特定指针类型的指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望std::map<string, any> *var1指向与std::any *var2相同的内存地址/值,因为我知道var2指向map<string, any>.

I would like std::map<string, any> *var1 to point to the same memory address/value as std::any *var2 because I know that var2 is pointing to a map<string, any>.

以下似乎有效:

std::map<string, any> *var1 = any_cast<std::map<string, any>>(var2);

可以吗?问题在于,即使var2实际上不是std::map<string, any>*而是其他东西,它也不会发出错误的转换提示.

Is it ok? The problem is that it does not signal bad cast even if var2 is actually not an std::map<string, any>* but something else, but if it is it still works.

我做对了吗?

std::map<string, any> *mapptr;
std::any realmap = std::map<string, any>({{"key", "value"}, {"key2", 5}});
std::any *ptrtomap = &realmap;
mapptr = any_cast<std::map<string, any>>(ptrtomap);
// Interesting part below
realmap = 6;
mapptr = any_cast<std::map<string, any>>(ptrtomap);

将变量的类型更改为整数后,任何指向的指针我仍然可以将该指针转换为类型为std::map的指针.

After changing the type of the variable to integer the any pointer is pointing to I can still cast that pointer to a pointer of type std::map.

什么???

推荐答案

尝试运行此代码

#include <stdio.h>
#include <map>
#include <string>
#include <any>

using namespace std;

int main()
{
    map<string, any> *amap;
    any realmap = std::map<string, any>({{"key", "value"}, {"key2", 5}});
    any *ptrtomap = &realmap;
    amap = any_cast<map<string, any>>(ptrtomap);
    printf("Pointer real map: %x\n", amap);

    // Interesting part below
    realmap = 6;
    amap = any_cast<map<string, any>>(ptrtomap);
    printf("Pointer invalid map: %x\n", amap);
    return 0;
}

它输出例如

指针真实地图:11cfd00
指针无效图:0

Pointer real map: 11cfd00
Pointer invalid map: 0

因此,非法转换返回了空指针.编译器无法检测到无效的强制转换

So the illegal conversion returned a null pointer. The compiler can't detect invalid casts

这篇关于any_cast std :: any指向特定指针类型的指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆