| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |
该宏定义了一个名为 "nameI的 demon 类,其中有n 个数据成员。 当n大于 0 时,必须将数据成员的类型和名称作为参数提供给宏。 每个数据成员由其类型 "Ti和名称 "datai 定义。 除了 "nameI类的定义外,该宏还定义了一个名为 "name的函数,用于创建 "nameI类的实例,并返回指向它的 "IlcDemon类的实例。
您不必使用该宏来定义恶魔。 如果宏的限制性过强,我们建议您直接定义一个 demon 类。
由于参数 "name用于命名 demon 类,因此无法在多个 demon 定义中使用相同的名称。
示例
Here's how to define a demon that calls the function MyConstraintI::reduceDomain(IlcIntVar var); of the constraint ct:
ILCCTDEMON1 (CallReduceDomain, MyConstraintI,
reduceDomain, IlcIntVar,var);然后,这个宏会生成与下面几行类似的代码:
classCallReduceDomainI:publicIlcDemonI{
IlcIntVarvar;
public:
CallReduceDomainI(IlcCPEnginesolver、
MyConstraintI*CT、
IlcIntVaravar):
IlcDemonI(cp,ct), var(avar) {}
~CallReduceRomainI(){}
void propagate();
};
IlcDemon CallReduceDomain(IlcCPEnginesolver、
MyConstraintI*CT、
IlcIntVarvar){
return newsolver.getHeap())
CallReduceDomainI(s,ct,var);
}
voidCallReduceDomainI::propagate(){
((MyConstraintI*)getConstraint())->reduceDomain(var);
}下面的语句创建了一个类 "CallReduceDomainI的实例,并返回一个指向它的句柄。
CallReduceDomain(cp,ct,var);
更多信息,请参阅CP 优化器中的传播和CP 优化器中的传播事件概念。
另请参阅: