c++ - 初始化列表初始化的类 std::array 成员变量
问题描述
在 c++17 中你可以做
std::array a{ "one", "two", "three" };
并得到一个std::array<const char*, 3>
. 惊人的!
因为数组成员变量的大小必须在类声明中指定,所以它不能用作类变量。我想用这些任意长的初始化列表初始化数组和一个或多个constexpr
方法创建一个类。我希望唯一的构造函数将初始化列表作为参数。有没有办法做到这一点?
解决方案
您可以使用以数组大小为模板的类(如果需要,还可以使用元素类型),它具有可变参数构造函数。像这样的东西:
template <typename T, std::size_t N>
struct custom_array {
std::array<T, N> data;
template <typename... Args>
constexpr explicit custom_array(Args... args) : data{args...} {
}
};
为了能够推断N
,您还需要这样的推断指南:
template <typename... Args>
explicit custom_array(Args... args) -> custom_array<std::common_type_t<Args...>, sizeof...(Args)>;
您可以在 Compiler Explorer 上找到完整的示例。
推荐阅读
- javascript - 动态更新存储项目
- javascript - 如何过滤对象数组并保留对象键名?
- php - 来自 Azure Blob 的 Imagick
- python - 使用权重对具有缺失值的列子集进行逐行评分
- javascript - 哇动画:如果 JS 失败了怎么办?
- ruby-on-rails - 将 csv 导入 Rails 应用程序时的未知属性“id”
- android - 将资源文件迁移到 Androidx
- google-chrome - Google 应用无法在 chrome 浏览器上运行(V.76.0.3809.132(官方构建)(64 位))
- javascript - 为什么我的反向地理编码无法正常工作和显示?
- c# - 尝试反转粗麻布矩阵时系统抛出异常