在没有 RTTI 的情况下检查 std::any 的类型
Checking std::any's type without RTTI
我正在使用 std::any
并禁用了 RTTI 和例外。它有效,std::any_cast<T>()
能够检测类型是否正确,如 中所述。 std::any::type()
虽然没有 RTTI 被禁用。
我想检查我的 std::any
对象是否包含给定类型的值。有什么办法吗?
您可以将指针转换为您的 any
值并检查结果是否为空:
#include <any>
#include <iostream>
int main( int argc, char** argv ) {
std::any any = 5;
if( auto x = std::any_cast<double>(&any) ) {
std::cout << "Double " << *x << std::endl;
}
if( auto x = std::any_cast<int>(&any) ) {
std::cout << "Int " << *x << std::endl;
}
return 0;
}
我正在使用 std::any
并禁用了 RTTI 和例外。它有效,std::any_cast<T>()
能够检测类型是否正确,如 std::any::type()
虽然没有 RTTI 被禁用。
我想检查我的 std::any
对象是否包含给定类型的值。有什么办法吗?
您可以将指针转换为您的 any
值并检查结果是否为空:
#include <any>
#include <iostream>
int main( int argc, char** argv ) {
std::any any = 5;
if( auto x = std::any_cast<double>(&any) ) {
std::cout << "Double " << *x << std::endl;
}
if( auto x = std::any_cast<int>(&any) ) {
std::cout << "Int " << *x << std::endl;
}
return 0;
}