如何正确检查 any_cast 可用?

问题描述

我有一些输入,可以是简单的值或容器,封装在 std::any 中。我不想使用异常,所以我调用 noexcept 可变参数 any_cast 方法,该方法返回指向 any 值的指针或 nullptr

我可以使用 typeid() 验证任何可用的演员表,但我不想使用它并想找到一些替代方法。一些 typetraits 方法,例如 decltypedeclval 等。或者简单地使用 std::optional

但在这种情况下,可选似乎仍然潮湿和不稳定。 MSVC 编译器程序在运行时在 std::optional 源代码的深处中断。

#include <optional>
#include <any>
#include <utility>

int main() {

int input = 1; 

std::initializer_list<int> input2;
input2 = {1,2,3}; 

std::any any1 = input;
std::any any2 = input2;

std::optional o1 = *std::any_cast<int>(&any1);
std::optional p2 = *std::any_cast<int>(&any2);

// **std::forward<int & __ptr64>**(...) in  _Optional_destruct_base return nullptr.

}

实际上,typetraits 检查将是测试 any_cast 可能性的最佳方式。但我仍然对 C++ 元编程感到困惑。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)