读书人

看一例子XE2 C++器是有改

发布时间: 2012-03-11 18:15:38 作者: rapoo

看一例子,XE2 C++器是有改的,
先上代:

C/C++ code
#include <vector>class PACKAGE Base{protected : Base(): Port(0){}public :  int Port ; virtual bool Init() = 0 ; virtual ~Base() {}};class PACKAGE Base_A :public  Base{protected :public : bool Init() {return false;} ; ~Base_A() {} Base_A():Base() {} static  Base * CreateMe(){return new Base_A();}};class PACKAGE Base_B :public  Base{protected :public : bool Init() {return false;} ; ~Base_B() {} Base_B():Base() {} static  Base * CreateMe(){return new Base_B();}};typedef Base *(*TCreateObject)();struct TBaseInfo{  TCreateObject Create ;  AnsiString ID ;  String Title ;};std::vector<TBaseInfo> All ;void Test(){  TBaseInfo tmp[2] =  {      {&Base_A::CreateMe,"A","this is A"},      {&Base_B::CreateMe,"A","this is B"},            //XE2有趣的是,逗有有,均不。  };//象是XE2能正常值,B2007 值不正常,B2007 需要TBaseInfo一造函//TBaseInfo(TCreateObject,String,String),通造函可以正常值。//什麽 B2007 不能正常值呢?  All.resize(2);  All[0] = tmp[0];   All[1] = tmp[1];}TForm1 *Form1;//---------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)    : TForm(Owner){  Test();  if(All[0].Create == Base_A::CreateMe)    Caption = "OK" ;  else    Caption = "ERROR"  ;}//---------------------------------------


在 XE2 能正常行,果也正"OK"。
在 B2007 失或接失,提示信息是什麽部致命失。
如果些代分散到不同元中,在一定件下,B2007也正常接,
但果是"ERROR" , 就生行期了。

有趣可以一下各版本的情。

[解决办法]
一般人用不了这么复杂的。
[解决办法]
学习了
[解决办法]
不是一般地复杂
[解决办法]
我觉得,能发现编译器有问题得人都是牛人
[解决办法]
遇到部致命失是最郁闷的问题,都不知道怎么改
[解决办法]
在CB2010上测试OK

读书人网 >C++ Builder

热点推荐