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

时间:2011-02-11 18:43:39

标签: c++ casting rtti

我存储了一个指向type_info对象的指针。

int MyVariable = 123;
const std::type_info* Datatype = &typeid(MyVariable);

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

std::cout << ((*Datatype)3.14) << std::endl;

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

std::cout << (*Datatype(3.14)) << std::endl;

3 个答案:

答案 0 :(得分: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;

输出:

3
3

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

答案 1 :(得分:5)

我不认为这样的演员可以完成。假设你可以在运行时做这样的“动态”投射(不是指dynamic_cast)。然后,如果您使用强制转换的结果来调用函数,则编译器不能再对参数进行类型检查,您可以调用实际上不存在的函数调用。

因此,这是不可能的。

答案 2 :(得分:4)

类型转换不是一个运行时进程,它是一个编译时进程,至少对于你正在将转换为的类型。我不认为可以做到。