在没有 RTTI 的情况下检查 std::any 的类型

Hel*_*oer 3 c++ types rtti stdany

我正在使用std::anyRTTI 并禁用异常。它可以工作并且std::any_cast<T>()能够检测类型是否正确,如std::any 中所解释的,没有 RTTI,它是如何工作的?std::any::type()但在没有 RTTI 的情况下会被禁用。

我想检查我的std::any对象是否包含给定类型的值。有什么办法可以做到这一点吗?

peo*_*oro 5

您可以将指针转换为您的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;
}
Run Code Online (Sandbox Code Playgroud)