Позвольте мне поставить свой комментарий в ответ ...
Макрос - это инструкция для компилятора (здесь я использую собирательный термин) для замены в этом месте символов, определенных как этот макрос, например
#define FOO 1
int val = FOO; // at this point, FOO is replaced with 1
(с. Пожалуйста, не делайте этого в 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;
}
Он просто позволяет пользователю определить свою собственную реализацию для этой функции ... предположительно где-то еще - он берет адрес этой функции и использует его через указатель ...