std::any_cast 不需要原始对象的类型

Bfy*_*uvf 3 c++ casting std stdany anycast

是否可以std::any_cast在不放入第一个模板参数(所覆盖的对象的类型any)的情况下使用?我尝试使用any_cast<decltype(typeid(toCast).name())>但没有成功。

还尝试从一开始就存储对象类型,但这也不起作用,因为变量无法存储类型。

Sam*_*hik 5

C++ 的基本原则之一是所有对象的类型在编译时都是已知的。这是绝对的规则,没有例外。

相关对象的类型是std::any。仅当该类型在编译时也已知时,它才可以转换为其他类型。

您会注意到这std::type_info::name()不是一个constexpr表达式。返回的字符串仅在运行时已知。您正在尝试将某些内容强制转换为仅在运行时才知道其类型的对象。C++ 不是这样工作的。

一般来说,每当发生这种情况时,几乎所有时候正确的解决方案都会涉及在基类上调用虚拟方法。您可能需要重新设计您的类以使用继承和虚拟方法;使用它们的共同基类而不是std::any; 然后调用其虚拟方法。在某些情况std::variant下也可能有效。