我正在使用SDL中的一个函数,其中一个参数是类型的const GLchar* const*,所以为了调用它,我需要传入一个C字符串的引用,如下所示:
const char *str = "test";
glShaderSource(... , &str, ...);
Run Code Online (Sandbox Code Playgroud)
但是,我有一个std::string我想要传入的内容,并且做这样的事情会产生错误:
std::string str = "test";
glShaderSource(... , &str.c_str(), ...);
Run Code Online (Sandbox Code Playgroud)
我知道我可以简单地创建一个新const char*变量并将其保存为std::string:
const char *cstr = str.c_str();
Run Code Online (Sandbox Code Playgroud)
但有什么方法可以解决这个问题吗?我不喜欢制作一个新的变量.我尝试使用lambda但是没有用.
不,没有办法绕过它.
该函数glShaderSource需要一个指向字符缓冲区指针的指针(因为它希望你传递一个或多个 C字符串),并且你不能获取rvalue的地址(这就是表达式str.c_str()).
但这不是一个真正的问题,因为在你的最后一个例子中,你所做的只是指向指针的指针.这非常便宜和容易.
不要害怕"制造一个新的变量" - 无论如何命名的东西都是好的.