我正在尝试使用 a 的反向副本将标签调度到一个函数中boost::mpl::vector
:
using InitOrder = boost::mpl::vector<
struct Foo,
struct Bar,
struct Baz
>;
template <class... Stuff>
void initialize(boost::mpl::vector<Stuff...>) {
// Initialize in-order
}
template <class... Stuff>
void destroy(boost::mpl::vector<Stuff...>) {
// Exit in-order
}
void initializeAll() {
initialize(InitOrder{});
}
void destroyAll() {
destroy(typename boost::mpl::reverse<InitOrder>::type{});
}
如您所见,目标是让两个进程进入initialize
并且destroy
可以访问Stuff
包。但是,正如这里回答的那样,boost::mpl::reverse<InitOrder>::type
实际上不是a boost::mpl::vector
,并且调度失败:
main.cpp:27:2: 错误: 没有匹配的函数调用'destroy' 销毁(类型名 boost::mpl::reverse::type{}); ^~~~~~~ main.cpp:18:6:注意:候选模板被忽略:无法将 'vector' 与 'v_item' 匹配 无效销毁(升压::mpl::vector){ ^
- 如何轻松地在两个方向上操作类型列表?
- Boost.MPL 是否天生与可变参数模板不兼容?
如果需要,我可以放弃 Boost.MPL,只要替代方案是标准或 Boost。我正在使用 MSVC 14.1。