我是新來的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) –