根据构造函数字符串文字声明std :: array成员变量的大小

加里·艾伦

我需要一个将编译时字符串文字(const char * const)作为其唯一构造函数参数的类。

我希望有一个std :: array成员变量将单词存储在此字符串文字中(例如,使用空格分隔)。因此,此数组的大小永远不会改变,因为在编译时就知道字符串文字。

我怎样才能将此数组作为成员变量,同时使其大小由传递给构造函数的单词数来指定?

我想这样做,以便调用者无需在类模板参数中指定单词的数量,但是构造函数(大概是constexpr一个)可以在编译时推断出这一点。

我不想使用向量,因为在这种情况下是不必要的(存储的单词永远不会改变)。我将如何处理?

谢谢

叶普顿

首先,您必须使用类模板,因为对于不同的字符串文字,应该有不同的类大小。模板参数至少应包含封闭数组的大小(例如template<std::size_t N>)。

然后,您可能会发现C ++ 17中的类模板参数推导很有用,因此您不必自动指定大小。您可以使用构造函数中的自动演绎,也可以提供自定义演绎指南。如果没有C ++ 17,则可以创建类似于make_pair/的帮助程序函数,make_tuple函数将使用模板参数推导并创建相应的类。

#include <algorithm>
#include <array>
#include <cstddef>
#include <iterator>
#include <iostream>

template<std::size_t N>
struct WordStorage {
    std::array<char, N> char_array;
    WordStorage(const char (&char_array_)[N]) {
        std::copy(char_array_, char_array_ + N, char_array.begin());
    }
};

int main() {
    WordStorage s("hello");  // Deduced to WordStorage<6> as "hello" is const char[6].
    static_assert(s.char_array.size() == 6);
    std::cout << s.char_array.data() << "\n";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用字符串文字初始化构造函数中的std :: array <char,x>成员。GCC错误?

来自分类Dev

使用字符串文字初始化构造函数中的std :: array <char,x>成员。GCC错误?

来自分类Dev

在构造函数中调整字符串成员的大小

来自分类Dev

无法从成员变量的初始化字符串推断数组大小的原因是什么?

来自分类Dev

字符串类成员的移动构造函数的行为

来自分类Dev

如何static_assert std :: array成员的大小

来自分类Dev

字符串变量作为 Regex() 构造函数中的模式

来自分类Dev

函数模板,将字符串文字转换为std :: array

来自分类Dev

函数模板,用于将字符串文字转换为std :: array

来自分类Dev

如何声明未知大小的字符串array [](JAVA)

来自分类Dev

构造函数未设置成员变量,但声明了new

来自分类Dev

根据字符串访问类成员

来自分类Dev

根据字符串访问类成员

来自分类Dev

为什么向量不支持大小作为成员变量,如 Java 类中的长度变量,而不是函数 size()?

来自分类Dev

jQuery / JavaScript从字符串声明变量

来自分类Dev

Java全局字符串变量的声明

来自分类Dev

在字符串中声明变量

来自分类Dev

动态声明字符串变量

来自分类Dev

在字符串中声明变量

来自分类Dev

声明为字符串的变量数组

来自分类Dev

使用变量构造格式字符串

来自分类Dev

根据字符串大小填充?

来自分类Dev

将字符串转换为数字(根据输入的变量为浮点数或整数)

来自分类Dev

作为函数成员的变量声明?

来自分类Dev

从成员函数返回字符串指针

来自分类Dev

在注入构造函数之前注入成员变量

来自分类Dev

在类成员函数中声明类成员变量

来自分类Dev

为什么在构造字符串时`std :: istreambuf_iterator <char>`被视为函数声明?

来自分类Dev

const成员函数中成员变量的类型

Related 相关文章

  1. 1

    使用字符串文字初始化构造函数中的std :: array <char,x>成员。GCC错误?

  2. 2

    使用字符串文字初始化构造函数中的std :: array <char,x>成员。GCC错误?

  3. 3

    在构造函数中调整字符串成员的大小

  4. 4

    无法从成员变量的初始化字符串推断数组大小的原因是什么?

  5. 5

    字符串类成员的移动构造函数的行为

  6. 6

    如何static_assert std :: array成员的大小

  7. 7

    字符串变量作为 Regex() 构造函数中的模式

  8. 8

    函数模板,将字符串文字转换为std :: array

  9. 9

    函数模板,用于将字符串文字转换为std :: array

  10. 10

    如何声明未知大小的字符串array [](JAVA)

  11. 11

    构造函数未设置成员变量,但声明了new

  12. 12

    根据字符串访问类成员

  13. 13

    根据字符串访问类成员

  14. 14

    为什么向量不支持大小作为成员变量,如 Java 类中的长度变量,而不是函数 size()?

  15. 15

    jQuery / JavaScript从字符串声明变量

  16. 16

    Java全局字符串变量的声明

  17. 17

    在字符串中声明变量

  18. 18

    动态声明字符串变量

  19. 19

    在字符串中声明变量

  20. 20

    声明为字符串的变量数组

  21. 21

    使用变量构造格式字符串

  22. 22

    根据字符串大小填充?

  23. 23

    将字符串转换为数字(根据输入的变量为浮点数或整数)

  24. 24

    作为函数成员的变量声明?

  25. 25

    从成员函数返回字符串指针

  26. 26

    在注入构造函数之前注入成员变量

  27. 27

    在类成员函数中声明类成员变量

  28. 28

    为什么在构造字符串时`std :: istreambuf_iterator <char>`被视为函数声明?

  29. 29

    const成员函数中成员变量的类型

热门标签

归档