像這樣的宏可以使用的,但它可以說是醜陋:
#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