将const std :: vector <std :: string>转换为const char ** </std :: string>

时间:2013-06-10 15:44:25

标签: c++ vector c++03

我有一个像这样的签名函数:

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功能。

提前致谢。

1 个答案:

答案 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