[英]BOOST_FUSION_ADAPT_TPL_STRUCT with template members
我是 StackOverflow 的新手,也是用 C++ 編寫宏的新手,如果這個問題太幼稚,請見諒。
我寫了一個這樣的模板類:
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
和BOOST_FUSION_ADAPT_STRUCT
內部執行typedef std::map<T,U> M
我可以寫(Foo::M, m)
。 但是,由於Foo
是一個模板類,我不知道如何使其工作。
我在網上看到有一些技巧可以防止將逗號視為宏中的分隔符。 例如,有些人使用#define COMMA ,
並在std::map<T COMMA U>
使用COMMA
。 然而,這在這里不起作用。 我不太確定,但我認為在通過 BOOST_FUSION_ADAPT_TPL_STRUCT 調用的其他 BOOST 宏之前, COMMA
已經轉換為“,”。 有人建議使用括號來封裝類型。 但這在這里不起作用,因為這需要宏來處理括號並提取類型。 (我真的不熟悉宏,所以如果我錯了,請告訴我)
任何幫助將不勝感激! 非常感謝。
#include <boost/utility/identity_type.hpp>
BOOST_FUSION_ADAPT_TPL_STRUCT
(
(T)(U),
(Foo)(T)(U),
(unsigned, n),
(std::string, s),
(typename BOOST_IDENTITY_TYPE((std::map<T,U>)), m)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ ~^^~
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.