将可变参数模板扩展为静态成员数组

时间:2020-04-03 19:35:43

标签: c++ templates variadic-templates

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

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会很不错。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

对于矢量,您只需要

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

如果您使用的是C ++ 17,则可以通过与{p>

std::array

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

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