【问题标题】:c++ Variadic boost fusion map alias templatec++ Variadic boost融合图别名模板
【发布时间】:2021-10-18 13:53:25
【问题描述】:

考虑一下这个sn-p:

#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>>>                                     >
}

Demo

我正在努力使用别名模板 MsgSignals

signals 的类型变成的正确语法是什么

boost::fusion::map<boost::fusion::pair<MsgA, MsgSignal<MsgA>,
                   boost::fusion::pair<MsgB, MsgSignal<MsgB>>> 

【问题讨论】:

  • 错字顺便说一句:pair&lt;/*..*/&gt;, ... -> pair&lt;/*..*/&gt;...(逗号已删除)

标签: c++ tuples variadic-templates boost-fusion


【解决方案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;

Demo.

【讨论】:

  • 太好了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多