提问人:Juergen 提问时间:10/18/2021 更新时间:10/18/2021 访问量:97
c++ 可变参数升压融合映射别名模板
c++ Variadic boost fusion map alias template
问:
请考虑以下代码片段:
#include <boost/fusion/container/map.hpp>
#include <boost/fusion/include/pair.hpp>
struct MsgA {};
struct MsgB {};
using MsgList = std::tuple<MsgA, MsgB>;
template <typename Msg>
class MsgSignal {};
template <typename... Args>
using MsgSignals =
boost::fusion::map<boost::fusion::pair<Args, MsgSignal<Args>>, ...>;
int main() {
MsgSignals<MsgList> signals;
// signals should be of type boost::fusion::map<boost::fusion::pair<MsgA, MsgSignal<MsgA>,
boost::fusion::pair<MsgB, MsgSignal<MsgB>>> >
}
我正在为别名模板而苦苦挣扎。MsgSignals
什么是正确的语法,使得signals
boost::fusion::map<boost::fusion::pair<MsgA, MsgSignal<MsgA>,
boost::fusion::pair<MsgB, MsgSignal<MsgB>>>
答:
2赞
康桓瑋
10/18/2021
#1
您可以使用模板部分专用化来提取以下类型:std::tuple
template <typename Tuple>
struct MsgSignalsImpl;
template <typename... Args>
struct MsgSignalsImpl<std::tuple<Args...>> {
using type = boost::fusion::map<boost::fusion::pair<Args, MsgSignal<Args>>...>;
};
template <typename Tuple>
using MsgSignals = typename MsgSignalsImpl<Tuple>::type;
评论
pair</*..*/>, ...
pair</*..*/>...