c++ - 将 std::any 转换回其原始类型?

标签 c++ casting std c++17

有没有一种方法可以将 std::any 转换回其原始类型而无需对其进行硬编码?

我知道你能做到

std::any_cast<int>(example)

但这需要您已经知道“example”是一个 int。我注意到 std::any 存储原始类型,但我似乎无法找到将其用于转换的方法。我想做这样的事情:

static_cast<example.type()>(example);

很抱歉,如果这是一个基本问题,但我觉得这可能是不可能的,所以想检查一下。

最佳答案

不,因为强制类型转换的类型必须在编译时已知,而 std::any 实例中保存的类型在运行时已知。

我想在这里指出,std::any 用例非常非常有限。您可能永远不应该在面向最终用户的代码中使用它。它的角色是 void* 的类型安全替代品。我能想到的一个用例是在某些类型删除类的实现中,以前会使用 void*(可能类似于 std::function)。

仔细考虑 std::any 是否真的是您所需要的。

关于c++ - 将 std::any 转换回其原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53056185/

相关文章:

c++ - 如何从委托(delegate)发送信号

c++ - 将结构指针转换为 C++ 中的 union 指针

c++ - 为什么 const_cast 需要说明你要转换到什么?

c++ - 使用连续无符号整数列表初始化 std::vector<unsigned int>

c++ - 为什么在函数返回类型中不允许参数推导?

c++ - 显示带有 GLTessellated 对象的列表? (OpenGL)

c++ - 从字符串转换为 unsigned char* 会留下垃圾

c++ - std::ostringstream 未返回有效字符串

c++ - 从 ‘boost::filesystem3::path’ 到非标量类型‘std::string’的 boost 错误转换

c++ - 指向数据成员的指针是否有其偏移量?