Ah I got it to work with the following:

#define SEQ_FORMATS BOOST_PP_VARIADIC_TO_SEQ(FORMATS)
#define PASTE(l,r) l##r
#define STRINGIZE(x) #x
#define ARG_PAIR(x) {STRINGIZE(x), create<PASTE(x,File)>}
#define NTH_ARG(z, n, data) ARG_PAIR(BOOST_PP_SEQ_ELEM(n, data))
#define ARG_PAIRS BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(SEQ_FORMATS), NTH_ARG, SEQ_FORMATS)

Thanks guys!

On Thu, Jul 7, 2016 at 11:57 PM, Cherotek Music <cherotek@gmail.com> wrote:
Thanks for the suggestion but I still can't get it to work :(

#define SEQ_FORMATS BOOST_PP_VARIADIC_TO_SEQ(FORMATS)
#define ARG_PAIR(x) {#x, create<x##File>}
#define NTH_ARG(z, n, data) ARG_PAIR(BOOST_PP_SEQ_ELEM(n, data))
#define ARG_PAIRS BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(SEQ_FORMATS), NTH_ARG, SEQ_FORMATS)

gives the following error:

test.h:14:63: error: pasting ")" and "File" does not give a valid preprocessing token
 #define NTH_ARG(z, n, data) ARG_PAIR(BOOST_PP_SEQ_ELEM(n, data))
                                                               ^
test.h:13:33: note: in definition of macro ‘ARG_PAIR’
 #define ARG_PAIR(x) {#x, create<x##File>}

We're getting closer though

On Thu, Jul 7, 2016 at 6:19 PM, Mathias Gaunard <mathias.gaunard@ens-lyon.org> wrote:
On 6 July 2016 at 22:27, Cherotek Music <cherotek@gmail.com> wrote:
Hi,
I'm trying to make a macro chain that expands something like this

A, B, C

into something like this

{"A", create<AFile>}, {"B", create<BFile>}, {"C", create<CFile>}

This is what I have come up with

#define FORMATS A, B, C // Add new formats here
#define SEQ_FORMATS BOOST_PP_VARIADIC_TO_SEQ(FORMATS)
#define ARG_PAIR(s, data, x) {#x, create<x##File>}
#define SEQ_ARG_PAIRS BOOST_PP_SEQ_TRANSFORM(ARG_PAIR, ~, SEQ_FORMATS)
#define ARG_PAIRS BOOST_PP_SEQ_ENUM(SEQ_ARG_PAIRS)

Use BOOST_PP_ENUM with BOOST_PP_SEQ_SIZE and BOOST_PP_SEQ_ELEM instead of BOOST_PP_SEQ_TRANSFORM+BOOST_PP_SEQ_ENUM.

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users