我有一些输入,可以是简单的值或容器,包装在std::any
. 我不想使用异常,所以我调用返回指针或任何值的noexcept
可变参数方法。any_cast
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.
}
实际上,类型特征检查将是测试any_cast
可能性的最佳方法。但我仍然对 C++ 元编程感到困惑。