21 Eylül 2017 Perşembe

preprocessor

BOOST_PP_SEQ_FOR_EACH
Şu satırı dahil ederiz.
#include <boost/preprocessor.hpp>
Örnek
Şöyle yaparız
#define VARIANTS (char, unsigned char, short, unsigned short, int, unsigned int, float,
 double)

#define MAKE_EXPORT(r, data, elem) template class __declspec(dllexport) Container<elem>;


BOOST_PP_SEQ_FOR_EACH(MAKE_EXPORT, _, BOOST_PP_TUPLE_TO_SEQ(VARIANTS))
BOOST_PP_SEQ_FOR_EACH_I
Şu satırı dahil ederiz.
#include <boost/preprocessor/seq/for_each_i.hpp>
Macro + Data +  Sequence alır.
Örnek
Şöyle yaparız.
#include <boost/preprocessor/seq/elem.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>

#define types (int)(double)
#define funcs (AddInt)(AddDouble)

#define MACRO(_,funcs,i,type) \
    void add(type val) { obj.BOOST_PP_SEQ_ELEM(i, funcs)(val); }

BOOST_PP_SEQ_FOR_EACH_I(MACRO, funcs, types)
Macro her sequence için bir kere çağrılır. Data için ise indeks ile çağrılır. Çıktı olarak şunu alırız.
void add(int val) { obj.AddInt(val); }
void add(double val) { obj.AddDouble(val); }

Hiç yorum yok:

Yorum Gönder