Overview | Group | Tree | Graph | Index | Concepts |
ILOCPLEXGOAL0(name)
ILOCPLEXGOAL1(name, type0, var0)
ILOCPLEXGOAL2(name, type0, var0, type1, var1)
ILOCPLEXGOAL3(name, type0, var0, type1, var1, type2, var2)
ILOCPLEXGOAL4(name, t0, v0, t1, v1, t2, v2, t3, v3)
ILOCPLEXGOAL5(name, t0, v0, t1, v1, t2, v2, t3, v3, t4, v4)
ILOCPLEXGOAL6(name, t0, v0, t1, v1, t2, v2, t3, v3, t4, v4, t5, v5)
This macro defines a user goal class named nameI
and a
constructor named name
with n data members,
where n is the number following ILOCPLEXGOAL
. The
first parameter of this macro is always the name of the constructor
to be created. What follows are n pairs of parameters, each
parameter specifying a data member of the goal. The first parameter of such
a pair specifies the type of the data member and is denoted as
Ti
in the macro definition above. The second parameter of such
a pair, denoted by datai
, specifies the data member's name.
The constructor name
created by this function
will have IloEnv
env
as its first argument,
followed by n additional arguments. The constructor
creates a new instance of the user-written goal class nameI
and
populates its data members with the arguments following IloEnv
env
in the function argument list. The constructor
name
is what you should use to create new goal objects.
The call to the macro must be followed immediately by the
execute
method of the goal class. This method must
be enclosed in curly brackets, as shown in the examples that follow. The
macro will also generate an implementation of the method
duplicateGoal
that simply calls the default constructor
for the new class nameI
.
You are not obliged to use this macro to define goals. In particular, if
your data members do not permit the use of the default constructor as an
implementation of the method duplicateGoal
or
the default destructor, you must subclass IloCplex::GoalI
directly and implement those methods
appropriately.
Since the argument name
is used to construct the name of the
goal's implementation class, it is not possible to use the same name for
several goal definitions.
Example
Here's how to define a goal with one data member:
ILOCPLEXGOAL1(PrintX, IloInt, x) { IloEnv env = getEnv(); env.out() << "PrintX: a goal with one data member" << endl; env.out() << x << endl; return 0; }
This macro generates code similar to the following lines:
class PrintXI : public IloCplex::GoalI { public: IloInt x; PrintXI(IloEnv env, IloInt arg1) IloCplex::Goal execute(); IloCplex::Goal duplicateGoal(); }; PrintXI::PrintXI(IloEnv env, IloInt arg1) : IloCplex::GoalI(env), x(arg1) { } IloCplex::Goal PrintX(IloEnv env, IloInt x) { return new PrintXI(env, x); } IloCplex::Goal PrintXI::execute() { IloEnv env = getEnv(); env.out() << "PrintX: a goal with one data member" << endl; env.out() << x << endl; return 0; } IloCplex::Goal PrintXI::duplicateGoal() { return new PrintXI(getEnv(), x); }