
Hi, I have a set of classes that offer named parameter enabled constructors through the use of argument packs. Currently I have one huge header container all the available arguments of all classes. // params.h namespace geo { namespace keywords { BOOST_PARAMETER_NAME(a) BOOST_PARAMETER_NAME(b) } } // thing.h namespace geo { class thing { public: template<class Opts> thing(const Opts &o) { _m_x = o[Keywords::_a | 10]; //etc.. } }; } // thing2.h namespace geo { class thing2 { public: template<class Opts> thing2(const Opts &o) { _m_x = o[Keywords::_b | 10]; //etc.. } }; } First question: I'd like to place the BOOST_PARAMETER_NAME keywords as close to its usage as possible. I.e. I'd like to place BOOST_PARAMETER_NAME(a) on top of thing.h. If I do so, I think that over time other classes will start to have their own BOOST_PARAMETER_NAME(a) constructs in their header files, which I think would lead to multiple defined symbols if two class headers are included in the same translation unit, correct? So, is their any way to declare a parameter inside a class, through a typedef or similar? Let me illustrate class x { public: typedef boost::parameter::keyword<...> a; template<class Opts> x(const Opts &o) { _m_x = o[a | 10]; } }; x my_x(x::a = 5); If that is not possible, is there any way to limit the template parameter Opts in the above example to set of possible parameters? Best regards, Christoph