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

问题描述 投票:0回答:1

我已经定义了基类模板:

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个回答
0
投票

对于矢量,您只需要

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... };
© www.soinside.com 2019 - 2024. All rights reserved.