看一例子,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