0

我看看我们如何使用 Boost::ExtensionBOOST_EXTENSION_TYPE_MAP_FUNCTION宏。

例如像这样

BOOST_EXTENSION_TYPE_MAP_FUNCTION
{
    std::map<std::string, boost::extensions::factory<service> > &factories(types.get());
    factories["file_service"].set<file_service>();
}

BOOST_EXTENSION_TYPE_MAP_FUNCTION宏在extension.hpp中定义。

我想知道这个宏如何理解花括号中的内容,以及如何将这个宏扩展为类似“Hello 扩展宏”之类的东西?

4

1 回答 1

4

让我把我的评论变成一个答案......

宏是对编译器的指令(我在这里使用统称)在该位置替换定义为该宏的符号,例如

#define FOO 1

int val = FOO; // at this point, FOO is replaced with 1

(ps请不要在C++中这样做)

现在,在您的情况下发生的事情是有一组符号(函数的签名)定义为宏,所以所发生的只是编译器将用符号替换宏,最终结果将看起来(大致)像这样:

void boost_extension_exported_type_map_function(boost::extensions::type_map& types)
{
    std::map<std::string, boost::extensions::factory<service> > &factories(types.get());
    factories["file_service"].set<file_service>();
}

如您所见,这是一个简单的功能。您也可以这样做(但除非您有充分的理由,否则不要这样做)

#define BOB void foo(std::string const& bar)

BOB
{
  std::cout << "HEllo: " << bar << std::endl;
}

它只是允许用户为该函数定义自己的实现......大概在其他地方 - 它获取该函数的地址并通过指针使用它......

于 2011-08-08T15:39:16.913 回答