像这样的宏可以使用的,但它可以说是丑陋:
#include <boost/preprocessor.hpp>
#define AUTO_CONSTRUCTOR_DETAIL_PARAM(r, data, member) \
BOOST_TYPEOF(member) member
#define AUTO_CONSTRUCTOR_DETAIL_INIT(r, data, member) \
member(member)
#define AUTO_CONSTRUCTOR_DETAIL(className, mems) \
className(BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(\
AUTO_CONSTRUCTOR_DETAIL_PARAM, BOOST_PP_EMPTY, members))) : \
BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(\
AUTO_CONSTRUCTOR_DETAIL_INIT, BOOST_PP_EMPTY, member)) \
{}
#define AUTO_CONSTRUCTOR(className, members) \
AUTO_CONSTRUCTOR_DETAIL(className, members)
用途为:
struct MyFunctor {
public:
AUTO_CONSTRUCTOR(MyFunctor, (m_controller)(m_action)(m_allowRejection))
bool operator()() { return true; }
private:
Controller *m_controller;
String m_action;
bool m_allowRejection;
/* ... */
};
未经检验的,当然。
你的意思是你想接受成员的类型和直接初始化? – GManNickG 2011-03-30 06:28:14
你想让参数列表具有'Controller * a_controller,String a_action,bool a_allowRejection'吗?一个富有魅力的宏伟宏观工作? – 2011-03-30 06:28:22
@詹姆斯甚至编辑插件凯特会工作:) – 2011-03-30 06:38:38