c++ - 将可变参数模板扩展为静态成员数组
问题描述
我定义了一个基类模板:
template<class actual_class>
class base
{
public:
static const int value;
}
的定义value
取决于actual_class
tparam。
接下来,我有一堆来自 的派生类base
,我们称它们为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 = { ... }
...
}
对于用 < a, b > 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... };
推荐阅读
- python - ValueError:列的长度必须与键的长度相同
- ssl - Http通过socks5获取请求 | EOF 错误
- android - 如何使用 Proguard 缩小 Flutter 应用程序?
- swift - 使用用户默认值存储从另一个视图控制器传递的数据
- c++ - 推断基类的函数模板参数
- unity3d - Unity3D - 计算轨道上的 t 值位置
- php - ical ics 文件中的换行符在 Apple 日历上未正确显示
- excel - 使用 VBA 更改图表中的数据范围
- javascript - 无法读取 flatpickr.js 中未定义错误的属性“模式”
- javascript - 在方法中返回变量