c++ - 将 const std::vector<std::string> 转换为 const char **

标签 c++ vector c++03

我有一个带有如下签名的函数:

void foo(const std::vector<std::string>& args)
{
    ...
}

我想将 vector args转换为const char **(就像main中的argv)。如何做到这一点?我们实际上无法创建一个 char ** 数组,因为它(显然)无法转换 const 类型的 args[i].c_str() char *char *

我能想到的唯一(丑陋的)方法是使用 const_castconst char * 转换为 char *

有人会建议更优雅的方式来做到这一点吗?我应该注意我只能使用 c++03 功能。

提前致谢。

最佳答案

如果没有额外的数组,这是不可能完成的。 const char** 表示“指向 const char 的指针的指针” - 因此您需要一个地方,其中有实际的 char 指针。

所以您需要创建该数组。

struct c_str { const char* operator ()(const std::string& s) { return s.c_str(); } };
std::vector<const char*> pointers(args.size());
std::transform(args.begin(), args.end(), pointers.begin(), c_str());
// If you really want to be compatible with argv:
pointers.push_back(0);
// &pointers[0] is what you want now

关于c++ - 将 const std::vector<std::string> 转换为 const char **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027771/

相关文章:

C++ 深度优先搜索 (DFS) 实现

c++ - 我在 C++ 中创建阻塞队列 vector 时遇到问题

java - android.view.InflateException : Binary XML file line #27: Error inflating class android. 部件.ToggleButton

c++ - C++ 映射删除循环中的元素会使迭代器无效吗? (C++03)

c++ - 我应该将哪个 Boost 版本与支持 C++03 的编译器一起使用?

c++ - 如何在 c-ares 中获取 DNS 服务器

C++有没有可能让一个类扩展一个类,同时又是一个接口(interface)的实现?

c++ - 尝试将 C++11 代码转换为 C++03 时默认函数模板参数出错

c++ - 在用户定义的异常析构函数中释放动态内存

c++ - 是否可以使用数组拷贝来复制 vector 的一部分?