【发布时间】:2014-08-11 08:32:52
【问题描述】:
我有一个特征类,其中包含每个类在 boost::fusion::map 中的所有信号。
例子:
template <typename T> struct EventTraits;
class SomeClass;
template <> struct EventTraits<SomeClass>
{
struct Started;
struct Finished;
typedef boost::fusion::map<
boost::fusion::pair<Started, boost::signals2::signal<void()>>,
boost::fusion::pair<Finished, boost::signals2::signal<void(int)>>
> Events;
};
因为我经常需要这种特质特化,所以我想有一个宏来节省我的打字时间,就像这个虚构的例子:
CONSTRUCT_EVENTS(
SomeClass,
(Started, void())
(Finished, void(int))
)
如何实现这样的CONSTRUCT_EVENTS 宏?
作为起点,我查看了BOOST_FUSION_ADAPT_STRUCT,然后查看了 Boost Preprocessor,但我还没有使用过后者,所以我希望有人可以指导我。
【问题讨论】:
-
如果我正确理解您的问题,为什么这需要宏?你不能为此使用模板吗?无论何时何地都应该避免使用宏,即使它会导致更多的代码。
-
宏不是必需的,它可以让我“压缩”必要的代码。尤其是只用于命名查找的空结构,只需要放置一次。
标签: c++ templates boost boost-preprocessor