问题描述
我有一些输入,可以是简单的值或容器,封装在 std::any
中。我不想使用异常,所以我调用 noexcept
可变参数 any_cast
方法,该方法返回指向 any 值的指针或 nullptr
。
我可以使用 typeid()
验证任何可用的演员表,但我不想使用它并想找到一些替代方法。一些 typetraits 方法,例如 decltype
、declval
等。或者简单地使用 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 (将#修改为@)