将可变参数模板扩展为静态成员数组
Expand variadic template to array of static members
我定义了一个基础 class 模板:
template<class actual_class>
class base
{
public:
static const int value;
}
和 value
的定义取决于 actual_class
tparam.
接下来,我有一堆从base
派生的classes,我们称它们为a
和b
。我们还假设 a::value = 5
和 b::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 会很不错。
提前感谢您的帮助。
对于向量,你只需要
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... };
我定义了一个基础 class 模板:
template<class actual_class>
class base
{
public:
static const int value;
}
和 value
的定义取决于 actual_class
tparam.
接下来,我有一堆从base
派生的classes,我们称它们为a
和b
。我们还假设 a::value = 5
和 b::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 会很不错。
提前感谢您的帮助。
对于向量,你只需要
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... };