【问题标题】:A way around creating a std::string that stores different types一种创建存储不同类型的 std::string 的方法
【发布时间】:2020-06-30 22:02:29
【问题描述】:

所以我有一个函数接收void*,然后将其转换为uint8*,然后填充。在调用者代码中,它被附加到std::string。有点像下面的例子。

但是我想让它成为通用的,这样我就可以将不同的类型存储到字符串中,而无需对调用者代码中的特定类型进行硬编码。例如:如果我要将0x5 存储在一个字符数组中,我必须使用to_string(),如下所示。但是,如果我必须自己存储 char,我就不必使用 to_string()

void foo(void *p) {
    uint8_t *ptr = reinterpret_cast<uint8_t*>(p);  
    *ptr = 0x5; // for e.g 

    // now ptr stores a char. th
    *ptr = 'C'; 
}
int main(void) {
   char arr[20] = {0};
   std::string str;
   foo(arr);
   for (int i=0; i<20; i++) {
      str += to_string(arr[i]);
   }
   cout << str; // 
}

这是一个示例代码:https://cplayground.com/?p=jackal-cormorant-koala

您可以看到存储整数时它不打印的原因主要是因为我没有使用to_string()。我只是希望有一个通用函数来存储值。如果15 存储在字符数组中,则字符串存储"15"。如果'A'存储在char数组中,则字符串存储"A"

【问题讨论】:

标签: c++ arrays string


【解决方案1】:

虽然关于序列化的 cmets 是要走的路,但如果你只想用 charint 创建一个 string,你可以重载一个函数。

std::string store(int n) {
    return std::to_string(n); 
}

std::string store(char c) {
    std::string s;
    s += c;
    return std::string(s); 
}

int main(void) {
    //char arr[5] = {0};

    std::string str = store(15);
    cout << "String: " << str << endl;

    // ----------------------------------
    str += store('A');
    cout << "String: " << str << endl;
    //populateString(arr);
   
}

输出:

String: 15
String: 15A

【讨论】:

  • 对,但在我的代码中,我有一个 char array 来存储值并附加到 std::string。因此,存储在 char 数组中的任何内容都将始终以 char 作为参数类型调用函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多