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

std::any_cast without needing the type of the original object

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

也尝试从一开始就存储对象类型,但这也没有用,因为变量不能存储类型。

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

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

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

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