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

Convert const std::vector<std::string> to const char **

本文关键字:const std char 转换 lt vector string gt      更新时间:2023-10-16

我有一个签名函数:

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

我想将向量args转换为const char **(就像main中的argv一样)。如何做到这一点?我们实际上不能创建char **数组,因为它(显然)无法将类型为const char *args[i].c_str()转换为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