r****r 发帖数: 1 | 1 如果一个void *指针指向一个T类的实例, 怎样把此void *指针转换成T*指针如果T的
信息只能动态获取(用typeid operator)? |
x*****h 发帖数: 38 | 2 dynamic_cast ptr ?? not sure |
N*********y 发帖数: 105 | 3 Don't know what he means the info of T is dynamic.
【在 x*****h 的大作中提到】 : dynamic_cast ptr ?? not sure
|
s*******d 发帖数: 59 | 4 如果T是有限的几种类型,那就
if (typeid(p) == typeid(T*))
{
T* pt = p;
...
} |
s*******d 发帖数: 59 | 5 抄一段
http://blog.vckbase.com/bruceteen/archive/2004/09/13/811.aspx
问:在c++里怎么能知道一个变量的具体类型,如:c#里的typeof.还有我怎么知道一个
变量的类型是某个类型的子类,也就是实现关键字IS
答:
1。运行时获知变量类型名称,可以使用 typeid(变量).name,需要注意不是所有编译
器都输出"int"、"float"等之类的名称,对于这类的编译器可以这样使用:float f =
1.1f; if( typeid(f) == typeid(0.0f) ) ……
2。对于多态类实例,想得到实际的类名称,需要使用到RTTI,这需要在编译的时候加
上参数"/GR"。
3。对于普通变量,既然是自己写的,那当然也就应该知道它的类型,其实用不着运行
时获知;对于多态类实例,既然需要运行时获知实际类型,那么就说明这里不具有多态
性,既然没有多态性就不应该抽象它,这属于设计错误,总之,我认为RTTI是多余的。
4。对于多态类实例,使用 typeid(value) == typeid(value)来判断,不如使用
dyn |