C++中的字符串类型可选项

String type alternative in C++

本文关键字:类型 可选项 字符串 C++      更新时间:2024-05-09

我目前在一个标头中定义了一个函数,看起来像这个

void foo::GetValue(std::string& str);

此函数基本上为str指定一个值。我需要想出一个str的替代方案(基本上,没有使用标准库的东西(。

上述功能的实现在.cpp文件中是这样的:

void foo::GetValue(std::string& str)
{
std::string s = bar.someMethod();
str = s;
}

我想知道更换收割台的最佳/最简单的选择是什么?

我的一种方法是用char*替换头文件中的std::string,这样我就可以在头文件中使用以下内容:

void foo::GetValue(char* str);

在实现中,我会有这样的:

void foo::GetValue(char* str)
{
std::string resp = bar.someMethod();
char* c = new char[resp.size() + 1];
std::copy(resp.begin(), resp.end(), c);
c[resp.size()] = '';
}

上述方法的问题在于,许多文件正在调用此函数,并且需要修改代码。此外,他们还需要释放上述内存。我对此有两个担忧,即该函数的其他调用方需要做以下两件事

  1. 将传递给函数的std::string替换为char*

  2. 使用后释放char*

这两项对我来说似乎非常昂贵,无法信任其他来电者。

关于我能做些什么来解决这个问题,有什么建议吗?也许把签名改成别的?我更希望调用者仍然传递一个字符串,但是string.c_str()是一个常量字符指针。

对于给定的C++函数,如下所示:

std::string foo::GetValue(std::string& str)
{
return bar.someMethod(str);
}

那么你的等价C代码看起来是这样的:

void foo_GetValue(char* str, char* res, size_t size)
{
std::string str_arg = str;
std::string result = bar.someMethod(str_arg);
strncpy(res, result.c_str(), size - 1);
res[size-1] = 0; // Ensure is NUL terminated
}

从C:呼叫时

void example() {
const BUFFER_LEN = 1024;
char buffer[BUFFER_LEN];
foo_GetValue("example", buffer, BUFFER_LEN);
}