C++中的字符串类型可选项
String type alternative in C++
我目前在一个标头中定义了一个函数,看起来像这个
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()] = ' ';
}
上述方法的问题在于,许多文件正在调用此函数,并且需要修改代码。此外,他们还需要释放上述内存。我对此有两个担忧,即该函数的其他调用方需要做以下两件事
将传递给函数的
std::string
替换为char*
。使用后释放
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);
}
相关文章:
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 如果可推导类型上有替换,可变参数模板类型推导会使编译器崩溃
- 为什么协程的返回类型必须是可移动构造的?
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 了解类型是否可调用
- 将"模板<类型名 T>zero()"扩展/专用为可调用的"T"
- 检查模板中 nullptr 的函数指针,了解任何类型的可调用对象
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 为什么类型可转换性C++不传递
- 如何使C枚举类型可用于其他语言
- strlen()的可选项是什么
- 仅通过指针强制转换使类类型可互换,而无需分配任何新对象
- 使用哪种类型可调用std::bind
- 我可以从constexpr函数返回一个可选项吗
- 在C++17中,可以使用带有初始值设定项的if语句来解压缩可选项
- 与向量一起使用的C++可为Null/可选项的整数
- Boost Test Boost _CHECK_EQUAL,类型可转换为数组
- Resharper C++中是否有将函数/方法转换为尾部返回类型的选项