跳至主内容
框架 无框架

宏ILCGOAL0

定义文件: ilcp/cpext.h
ILCGOAL0(name)
ILCGOAL1(name, t1, nA1)
ILCGOAL2(name, t1, nA1, t2, nA2)
ILCGOAL3(name, t1, nA1, t2, nA2, t3, nA3)
ILCGOAL4(name, t1, nA1, t2, nA2, t3, nA3, t4, nA4)
ILCGOAL5(name, t1, nA1, t2, nA2, t3, nA3, t4, nA4, t5, nA5)
ILCGOAL6(name, t1, nA1, t2, nA2, t3, nA3, t4, nA4, t5, nA5, t6, nA6)
创建新目标类的宏。

该宏定义了一个名为 "nameI的目标类,其中有n 个数据成员。 当n大于 0(零)时,数据成员的类型和名称必须作为参数提供给宏。 每个数据成员由其类型 "Ti和名称 "datai 定义。 宏调用后必须紧接着定义目标类的 "execute成员函数体。 除了定义类 "nameI外,该宏还定义了一个名为 "name的函数,其第一个参数是 "IlcCPEngine solver,后面的n 个参数对应n 个数据成员。 该函数创建了一个类 "nameI实例,用最后n 个参数填充了数据成员,并返回了一个指向它的类 "IlcGoal实例。

您不必使用此宏来定义目标。 如果宏定义对您来说过于严格,我们建议您直接定义目标类。

由于参数 "name用于命名目标类,因此不可能在多个目标定义中使用相同的名称。

示例

下面介绍如何使用一个数据成员来定义目标:

 ILCGOAL1(PrintX, IlcInt, x){
   IlcCPEngine cp = getCPEngine();
   cp.out() <<"PrintX:有一个数据成员的目标" << std::endl;
   cp.out() << x << std::endl;
   return 0;
 }

该宏生成的代码与下面几行类似:

 classPrintXI: publicIlcGoalI{
   public:
     IlcIntx;
     PrintXI(IlcCPEnginesolver,IlcInt);
     IlcGoal execute();
 };
 PrintXI::PrintXI(IlcCPEnginesolver,IlcInt arg1)
   :IlcGoalI(cp), xarg1){}
 IlcGoal PrintX(IlcCPEnginesolver,IlcIntx){
   return newsolver.getHeap())PrintXI(cp,x);
 }
 IlcGoal PrintXI:: execute() {
   IlcCPEngine cp = getCPEngine();
   cp.out() <<"PrintX:有一个数据成员的目标" << std::endl;
   cp.out() << x << std::endl;
   return 0;
 }

下面的语句创建了一个类 "PrintXI的实例,并返回一个指向它的句柄。

 PrintX(cp,2);
 

另请参阅: