将 const std::vector<std::string> 转换为 const char **
Convert const std::vector<std::string> to const char **
我有一个签名函数:
void foo(const std::vector<std::string>& args)
{
...
}
我想将向量args
转换为const char **
(就像main中的argv
一样)。如何做到这一点?我们实际上不能创建char **
数组,因为它(显然)无法将类型为const char *
的args[i].c_str()
转换为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
相关文章:
- cppcheck在const std::string[]上引发警告
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 如何在旧c++中初始化const-std向量
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- r语言 - C++ 类型为"const std ::?
- std::move a const std::vector in a lambda capture
- 无法从'const std::string [3]'转换为'std::string'
- test1.cpp:9:77:错误:对"(const std::normal_distribution) <double>(std::mt19937&)"的调用不匹配
- 创建一个 const std::vector ,其中包含另一个 const std::vector 和其他值
- 有效地初始化 const std::vector 类成员
- 在 C++17 中使用 const std::string& 参数有意义吗?
- 为什么 std::unordered_map 不能与 const std::string 键一起使用?
- 无法在"catch(const std::exception &ex)"中捕获 std::invalid_argument
- 错误:C2679 二进制"==":未找到采用类型 'const std::string' 的右侧操作数的运算符(或者没有可接受的转换)
- 如何初始化 const std::vector<MyClass>
- 使用计数"const std::shared_ptr<...>"可变吗?
- 变量参数列表 后面的'const std::string&'弄乱了堆栈
- C++错误:将"const umap_int {aka const std::unordered_map<int, int>}"作为"this"参数会丢弃限定符 [-permissive]
- 不存在从"const std::string"到"time_t"的合适转换功能
- 无法从'std::string'中推断出'const std::reverse_iterator<_RanIt> &'的模板参数