我看看我们如何使用Boost :: Extension BOOST_EXTENSION_TYPE_MAP_FUNCTION
宏。
例如this:
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中定义。
我想知道这个宏如何理解Curly Brackets中的内容以及例如如何将这个宏扩展为像“Hello extended macro”这样的东西?
答案 0 :(得分:4)
让我把我的评论写成答案......
宏是指向编译器的指令(我在这里使用集合术语)在该位置替换定义为该宏的符号,例如
#define FOO 1
int val = FOO; // at this point, FOO is replaced with 1
(p.s。请不要在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;
}
它只是允许用户为该函数定义自己的实现...大概在其他地方 - 它接受该函数的地址并通过指针使用它...