我是新来的StackOverflow和新的编写宏的C++,请原谅我,如果这个问题太天真了。BOOST_FUSION_ADAPT_TPL_STRUCT模板成员
我写了一个模板类,像这样:
template<typename T, typename U>
class Foo
{
public:
unsigned n;
std::string s;
std::map<T,U> m;
}
,我想用BOOST_FUSION_ADAPT_TPL_STRUCT,使其作为融合:
BOOST_FUSION_ADAPT_TPL_STRUCT
(
(T)(U),
(FOO)(T)(U),
(unsigned, n),
(std::string, s),
(std::map<T,U>, m)
)
我知道这并不为内部map<T,U>
逗号工作会造成麻烦。如果我的班级不是模板班,我可以在Foo
里面做typedef std::map<T,U> M
,在BOOST_FUSION_ADAPT_STRUCT
里面我可以写(Foo::M, m)
。但是,由于Foo
是一个模板类,我不知道如何使其工作。
我在网上看到有一些技巧可以防止逗号在宏中作为分隔符。例如,有些人使用#define COMMA ,
并在std::map<T COMMA U>
中使用COMMA
。然而这在这里不起作用。我不是很确定,但我认为COMMA
已经在通过BOOST_FUSION_ADAPT_TPL_STRUCT调用的其他BOOST宏之前转换为“,”。有人建议使用括号来封装类型。但是这不起作用,因为这需要宏处理括号并提取类型。 (我真的不熟悉宏,所以请让我知道如果我错了)
任何帮助将不胜感激!非常感谢你。
[以下是几种可能性(http://stackoverflow.com/questions/32314575/q-declare-metatype-a-boostmulti-array/32314727#32314727) –