【问题标题】:How to extract/expand variadic template parameters如何提取/扩展可变参数模板参数
【发布时间】:2014-03-20 10:31:41
【问题描述】:
template <typename T1, typename T2>
class Base
{
  T1 t1; 
  T2 t2;
};

template <typename...TN>
class Derived
    : public Base< std::tuple<QList<TN...>>,
                   std::tuple<QVector<TN...>> > //does not work
{
};

Derived<int, double> d;
  • t1 应变为 std::tuple&lt;QList&lt;int&gt;, QList&lt;double&gt;&gt;
  • t2 将变为 std::tuple&lt;QVector&lt;int&gt;, QVector&lt;double&gt;&gt;

我不知道这是否可能。目前我为此使用预处理器魔法。但我希望可变参数模板也可以做到这一点。那么,我可以做任何递归的事情或任何类似的事情来提取模板吗?

【问题讨论】:

  • 我认为 Base&lt; std::tuple&lt;QList&lt;TN&gt;...&gt;, std::tuple&lt;QList&lt;TN&gt;...&gt; &gt; 应该可以正常工作 - 即您只是将 ... 放在错误的位置(它扩展了以前的模式,并且您希望拥有 QList&lt;TN0&gt;, QList&lt;TN1&gt;, and so on 而不是 QList&lt;TN0, TN1, and so on &gt;

标签: c++ templates c++11 variadic-templates stdtuple


【解决方案1】:

正如@dyp 所说,您在错误的位置展开了包。应该是这样的:

: public Base< std::tuple<QList<TN>...>,
               std::tuple<QVector<TN>...> >

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多