我有一个像这样的签名函数:
void foo(const std::vector<std::string>& args)
{
...
}
我希望将向量args
转换为const char **
(就像在main中的argv
一样)。怎么做到这一点?我们实际上无法生成char **
数组,因为它(显然)无法将类型为args[i].c_str()
的{{1}}转换为const char *
。
我能想到的唯一(丑陋)方式是使用char *
从const_cast
投射到const char *
。
有人会建议更多优雅的这样做吗?我应该注意,我只能使用c ++ 03功能。
提前致谢。
答案 0 :(得分:4)
没有额外的数组就无法完成。 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