- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是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 将其作为 fusion :
BOOST_FUSION_ADAPT_TPL_STRUCT
(
(T)(U),
(FOO)(T)(U),
(unsigned, n),
(std::string, s),
(std::map<T,U>, m)
)
我知道这不起作用,因为 map<T,U>
中的逗号会引起麻烦。如果我的类不是模板类,我可以做 typedef std::map<T,U> M
里面Foo
在 BOOST_FUSION_ADAPT_STRUCT
里面我可以写(Foo::M, m)
.然而,作为 Foo
是一个模板类,我不知道如何让它工作。
我在网上看到有一些技巧可以防止逗号在宏中被视为分隔符。例如,有些人使用 #define COMMA ,
并使用 COMMA
在 std::map<T COMMA U>
.然而,这在这里不起作用。我不太确定,但我认为 COMMA
在通过 BOOST_FUSION_ADAPT_TPL_STRUCT 调用的其他 BOOST 宏之前已经转换为“,”。有人建议使用括号来封装类型。但这在这里不起作用,因为这需要宏来处理括号并提取类型。 (我真的不熟悉宏所以如果我错了请告诉我)
任何帮助将不胜感激!非常感谢。
最佳答案
#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)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ ~^^~
)
关于c++ - BOOST_FUSION_ADAPT_TPL_STRUCT 与模板成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33521288/
我是StackOverflow的新手,也是c++写宏的新手,如果这个问题太幼稚请见谅。 我写了一个这样的模板类: template class Foo { public
由于 BOOST_FUSION_ADAPT_TPL_STRUCT,我正在尝试迭代 C++ 模板结构.我的结构包含固定大小的多维数组,其大小是模板参数。如果我们考虑修改 Boost 的示例以解决我的问题
我是一名优秀的程序员,十分优秀!