C++;Boost.Fusion中的可变宏? P>因此,C++不支持变量宏,C++标准不提及任何变量宏。我知道C99引入了变量宏,使用了< C++ > VAY-AgsSux,并且某些C++编译器(如GCC)甚至提供了C++中允许的扩展,但事实上,变量宏根本不是标准C++的一部分。

C++;Boost.Fusion中的可变宏? P>因此,C++不支持变量宏,C++标准不提及任何变量宏。我知道C99引入了变量宏,使用了< C++ > VAY-AgsSux,并且某些C++编译器(如GCC)甚至提供了C++中允许的扩展,但事实上,变量宏根本不是标准C++的一部分。,c++,boost,macros,c-preprocessor,variadic-macros,C++,Boost,Macros,C Preprocessor,Variadic Macros,现在,Boost.Fusion中有一个特性,您可以使用宏将Fusion序列绑定到任意类或结构。这允许您使用类或结构,就像它是一个融合序列一样 下面是一个如何使用它的示例(摘自Boost文档): 现在,没有可变宏,这段代码怎么可能呢?BOOST\u FUSION\u ADAPT\u STRUCT宏似乎具有任意数量的参数,因为它可以与任意用户定义的类或结构一起工作 我知道Boost以有趣的方式来弯曲C++是著名的,但是如果没有编译器支持,这看起来是完全不可能的。那么Boost.Fusion是用什么魔

现在,Boost.Fusion中有一个特性,您可以使用宏将Fusion序列绑定到任意类或结构。这允许您使用类或结构,就像它是一个融合序列一样

下面是一个如何使用它的示例(摘自Boost文档):

现在,没有可变宏,这段代码怎么可能呢?
BOOST\u FUSION\u ADAPT\u STRUCT
宏似乎具有任意数量的参数,因为它可以与任意用户定义的类或结构一起工作

我知道Boost以有趣的方式来弯曲C++是著名的,但是如果没有编译器支持,这看起来是完全不可能的。那么Boost.Fusion是用什么魔法来实现的呢

PS:是的,我知道Boost是开源的。我做的第一件事就是看源代码。它似乎在使用Boost预处理器库以某种方式连接宏。但我不明白这如何适用于任意数量的参数,而源代码是一个非常密集的预处理器代码集合,很难理解

BOOST_FUSION_ADAPT_STRUCT(
    demo::employee,
    (std::string, name)
    (int, age))
这是一个包含两个参数的宏: 论点1:演示::雇员 参数2:(std::string,name)(int,age)

参数2与字符串连接以形成另一个宏调用,该宏调用也采用2个参数:

BOOST_FUSION_SOME_INTERNAL_MACRO(std::string, name)
BOOST_FUSION_SOME_INTERNAL_MACRO(int, age)

它可能不适用于任意数量的参数(除非编译器实际上支持可变宏),但只适用于足够大的数量。
BOOST_FUSION_SOME_INTERNAL_MACRO(std::string, name)
BOOST_FUSION_SOME_INTERNAL_MACRO(int, age)