| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |
该宏定义了一个名为 "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);
另请参阅: