作者godman362 (Shizuru)
看板C_and_CPP
标题[问题] RTTI
时间Sun Mar 15 17:24:19 2009
我自行写了一个如下的范例
红色注明的地方,是我一加上去之後
compile就会告知我Construct的部份出了问题,我不懂原因是什麽,如下:
#include <iostream>
#include <typeinfo>
using namespace std;
template <class AnyType = int>
class Base
{
private :
AnyType codX;
AnyType codY;
public :
Base();
Base(AnyType, AnyType);
Base(const Base<AnyType> &);
void showXY() { cout <<"(" <<codX <<", " <<codY <<")" <<endl; };
};
template <class AnyType>
Base<AnyType>::Base()
{
if (typeid(AnyType) == typeid(float)) { codX = 0; codY = 0; }
else if (typeid(AnyType) == typeid(double)) { codX = 0.3; codY = 0.5; }
else if (typeid(AnyType) == typeid(char)) { codX = 'A'; codY = 'B'; }
else if (typeid(AnyType) == typeid(string)) { codX = "S"; codY = "H"; }
else { codX = 0; codY = 0; }
}
int main()
{
Base<double> Ob;
//Error !?
system("pause");
return 0;
}
我不懂为什麽这样写不会过
他的Error如下:
cannot convert `const char[2]' to `double' in assignment
我在Construct中条列式分开,判断的部份不会判断到string的部份才对
更何况我放入的型态是double
所以我看不出来compile不会过得原因是什麽?
还请各位指点一下,谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.118.54.246
※ 编辑: godman362 来自: 122.118.54.246 (03/15 17:25)
1F:推 chrisdar:codX = 'S'; codY = 'H'; 03/15 17:29
2F:→ legnaleurc:你该用偏特化,而不是typeid这种用途有限的东西 03/15 17:49
4F:→ legnaleurc:执行期是不会跑到,可是编译期一定会编译到那段 03/15 17:50
5F:→ godman362:可以请问一下何谓偏特化吗? 不了L大的意思 03/15 18:47
6F:→ godman362:另外想请问C大,万一我不只有要判断这些型态怎麽办 03/15 18:48
7F:→ godman362:这样不就要写非常多个case吗 03/15 18:48
8F:推 legnaleurc:C大贴的写法就是特化(sorry我讲错了 03/15 19:02
9F:→ legnaleurc:单一参数没什麽好偏特化的,囧) 03/15 19:02
10F:→ legnaleurc:你现在的写法还不是要写很多个case = = 03/15 19:03
11F:推 chrisdar:你得到他了 RTTI我都用在子物件因为参数传递被转型成父 03/15 19:08
12F:→ chrisdar:物件的时候还原其原来的面貌 03/15 19:08
13F:→ godman362:l大抱歉,我的意思是说要写很多的construct 03/15 19:17
14F:→ godman362:关於C大您用的地方不是很了解,请问有范例可以借参考吗 03/15 19:18
15F:→ godman362:另外想问,为什麽我原本的写法会出问题呢? 03/15 19:19
16F:推 chrisdar:Ctor如果要针对不同型别给予不同初始值的话就=您所理解的 03/15 19:19
18F:→ godman362:我之前的确是参考C大您所给予的网页 03/15 19:24
19F:→ godman362:先谢过C大以及L大的指点,感谢 03/15 19:26
21F:→ jerohands:string是class,因此把typeid(string)这一行注解掉 03/16 17:38
22F:→ jerohands:答案就对了 03/16 17:38