This is not possible; you need to resort to macro-based solutions or use the predefined set of types that named members provide.
Possible macro approach:
#define MAGIC(name_) \
template<typename T> struct Magic1 { \
T name_; \
};
MAGIC(foo);
or
struct Magic1 { \
type_ name_; \
};
MAGIC(foo);
Using preprocessor magic, for example. using Boost.Preprocessor , you should be able to generate n named members in a more convenient way.
, , :
enum { MemberNameFoo, MemberNameBar };
template<class T, int id>
struct named_member;
template<class T>
struct named_member<T, MemberNameFoo> {
T foo;
};
template<class T>
struct named_member<T, MemberNameBar> {
T bar;
};
template<class T, int name>
struct holder : named_member<T, name> {};
typedef holder<int, MemberNameFoo> HasFoo;
typedef holder<int, MemberNameBar> HasBar;
n named_member , Boost.MPL .