Re: preprocessor question
On Dec 1, 3:16 pm, David Resnick <lndresn...@gmail.com> wrote:
Given this code fragment:
#define IFV(func, number) \
incomingFunctVal<CVxicBridgedXferIncomingAction> val##num=
ber
( \
number, &CVxicBridgedXferIncomingAction::func); \
m_transFnMap.insert(fnMap::value_type(#func, val##number)=
);
IFV( DoJoin, 1 );
IFV( DoJoinRestartReco, 2 );
IFV( DummyAction, 3 );
IFV( RestartReco, 4 );
....
IFV( SomeFunc, 100 );
I'm wondering if there is a way to have the numbers in the function
macro increment automatically?
You could use __COUNTER__ macro. If it is supported by your compiler.
Otherwise, draw inspiration from boost preprocessor library:
http://www.boost.org/doc/libs/1_37_0/libs/preprocessor/doc/ref/counter.html
The code in the macro isn't really subject to change (it is the way to
use a state machine
implementation that I can't modify).
That's too bad, since such an interface is real pain.
I wonder why incomingFunctVal<> constructor needs that integer? If it
can be auto-generated (possibly in incomingFunctVal<> constructor) by
incrementing a global or class static variable, and if you don't
really need valN objects (their copies are stored in m_transFnMap
anyway) the macro could be simplified to:
typedef CVxicBridgedXferIncomingAction X; // for brevity
int x = 0; // the global counter
#define IFV(func) \
m_transFnMap.insert( \
fnMap::value_type( \
#func \
, incomingFunctVal<X>(++x, &X::func) \
) \
);
--
Max