我有一个带有如下签名的函数:
void foo(const std::vector<std::string>& args)
{
...
}
我想将 vector args
转换为const char **
(就像main中的argv
)。如何做到这一点?我们实际上无法创建一个 char **
数组,因为它(显然)无法转换 const 类型的
到 args[i].c_str()
char *char *
。
我能想到的唯一(丑陋的)方法是使用 const_cast
从 const 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/