2

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

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

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

我能想到的唯一(丑陋的)方法是使用const_castto cast from const char *to char *

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

提前致谢。

4

1 回答 1

4

没有额外的数组就无法完成。A 的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
于 2013-06-10T15:49:08.853 回答