【问题标题】:Expand variadic template to array of static members将可变参数模板扩展为静态成员数组
【发布时间】:2020-04-03 19:35:43
【问题描述】:

我已经定义了一个基类模板:

template<class actual_class>
class base
{
public:
    static const int value;
}

value 的定义取决于actual_class tparam。

接下来,我有一堆来自base 的派生类,我们称它们为ab。我们还假设a::value = 5b::value = 10

现在,在我需要从参数包访问静态值的方法模板中。我想把它们放在一个向量中。

template<class... derived_from_bases>
void foo(irrelevant_class<derived_from_bases...> irrelevant)
{
    // std::vector<int> values = { ... }
    ...
}

对于使用 tparams 调用的函数,我希望值向量看起来像这样:

std::vector<int> values = {5 /* a::value */, 10 /* b::value */};

还有一个 std::array 而不是 std::vector 会是一个不错的选择。

提前感谢您的帮助。

【问题讨论】:

    标签: c++ templates variadic-templates


    【解决方案1】:

    对于向量,你只需要

    std::vector<int> values = { derived_from_bases::value... };
    

    如果你有 C++17,你可以像这样得到std::array

    std::array values = { derived_from_bases::value... };
    

    CTAD 将为您推断出数组的类型和大小。如果你没有 C++17,那么你可以使用

    std::array<int, sizeof...(derived_from_bases)> values = { derived_from_bases::value... };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2014-04-12
      • 2010-10-15
      相关资源
      最近更新 更多