| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |
该宏定义了一个名为 "nameI的整数谓词类,其中有n 个数据成员。 当n大于 0(零)时,数据成员的类型和名称必须作为参数提供给宏。 每个数据成员由其类型 "Ti和名称 "datai 定义。 宏调用后必须紧接着定义的整数谓词类的 "isTrue成员函数体。 除了 "nameI类的定义外,该宏还定义了一个名为 "name的函数,用于创建 "nameI类的实例,并返回指向它的 "IlcIntPredicate类的实例。
CP 优化器不会检查您定义的谓词的有效性。 It assumes that the size of the array (an instance of IlcIntArray) passed as an argument to the member function IlcIntPredicate::isTrue will always be the same. 它还假定作为参数传递的数组名称为 "val。 也就是说,您必须使用该名称来定义谓词。
您不必使用该宏来定义整数谓词。 如果宏的限制性过强,我们建议您直接定义一个整数谓词类。
由于参数 "name用于命名整数谓词类,因此无法在多个整数谓词定义中使用相同的名称。
示例
下面介绍如何用一个数据成员定义一个整数谓词:
ILCINTPREDICATE1(AllLessThanX,IlcInt,x){
返回(val[0] < x && val[1] < x && val[2] <
x);
}该谓词是一个三元谓词,因此它假定作为参数传递给成员函数 "IlcIntPredicate::isTrue的数组大小为 3。 如果所有值都小于整数 x,则谓词为真。
该宏生成的代码与下面几行类似:
classAllLessThanXI: publicIlcIntPredicateI{
IlcIntx;
public:
AllLessThanXI(IlcIntxx):x(xx){}
~AllLessThanXI(){}
IlcBool isTrue(IlcIntArrayval);
};
IlcIntPredicate AllLessThanX(IlcCPEnginesolver,IlcIntxx){
return newsolver.getHeap())AllLessThanXI(xx);
}
IlcBool AllLessThanXI::isTrue(IlcIntArrayval){
返回(val[0] < x && val[1] < x && val[2] <
x);
} 下面的语句创建了一个类 "AllLessThanXI的实例,并返回一个指向它的句柄。
AllLessThanX(s,4);
另请参阅:
IlcIntArray,IlcIntPredicate,IlcIntPredicateI,IlcTableConstraint