我如何使用type_info进行类型转换?

Max*_*xpm 10 c++ casting rtti

我已经存储了一个指向type_info对象的指针.

int MyVariable = 123;
const std::type_info* Datatype = &typeid(MyVariable);
Run Code Online (Sandbox Code Playgroud)

我如何使用它来将另一个变量强制转换为该类型?我试过这个,但它不起作用:

std::cout << ((*Datatype)3.14) << std::endl;
Run Code Online (Sandbox Code Playgroud)

使用类型转换的函数形式不起作用:

std::cout << (*Datatype(3.14)) << std::endl;
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 16

只是你不能这样做type_info.此外,在您的示例DataType中不是类型,它是指向类型对象的指针type_info.你不能用它来演员.转换需要类型,而不是指针或对象!


在C++ 0x中,你可以这样做,

    int MyVariable = 123;

    cout << (decltype(MyVariable))3.14 << endl;

    cout << static_cast<decltype(MyVariable)>(3.14) << endl;
Run Code Online (Sandbox Code Playgroud)

输出:

3
3
Run Code Online (Sandbox Code Playgroud)

在线演示:http://www.ideone.com/ViM2w


Mar*_*k B 5

我认为这种铸造是不可能的。假设您可以在运行时这样进行“动态”转换(并非意味着dynamic_cast)。然后,如果您使用强制转换的结果来调用函数,则编译器将无法再对参数进行类型检查,并且可以调用实际上不存在的函数调用。

因此,这是行不通的。

  • 在这一点上,我认为我们同意,我在回答中也说了很多。我不同意的是丢失类型检查的问题将是导致此问题不起作用的原因。如果将`foo *`转换为`bar *`并在其上调用方法,则可以使用我提到的强制转换来调用实际上并不存在的函数调用。 (2认同)