将std :: vector <std :: string>作为C风格字符串数组传递(char**)

pla*_*cel 2 c++ opengl c++11

我想将std :: strings的向量传递给OpenGL作为C样式的空终止字符数组(const char**)的数组.

void glTransformFeedbackVaryings(GLuint program,
                                 GLsizei count,
                                 const char **varyings,
                                 GLenum bufferMode);
Run Code Online (Sandbox Code Playgroud)

可能吗?

bst*_*our 12

第一次使用std::string.c_str()功能,将它们映射到const char*的.

std::vector<const char*> c_strs;
std::transform(std::begin(strings), std::end(strings), 
               std::back_inserter(c_strs), std::mem_fn(&std::string::c_str));
Run Code Online (Sandbox Code Playgroud)

然后通过.data()vector 的成员将它传递给你的函数:

glTransformFeedbackVaryings( ... , c_strs.size(), c_strs.data(), ...);
Run Code Online (Sandbox Code Playgroud)

用你的其他参数替换... 注意:我没有编译这段代码,但它应该没问题(理论上).

如果空间对您非常重要,您可以提前在向量中保留空间

c_strs.reserve(strings.size());
Run Code Online (Sandbox Code Playgroud)

或者用变换后

c_strs.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)