我正在使用SDL中的一个函数,其中一个参数的类型为const GLchar* const*
,所以为了调用它,我需要传入一个C字符串的引用,如下所示: / p>
const char *str = "test";
glShaderSource(... , &str, ...);
但是,我有一个std::string
我想要传递,并且这样做会产生错误:
std::string str = "test";
glShaderSource(... , &str.c_str(), ...);
我知道我可以简单地创建一个新的const char*
变量并将std::string
保存到它:
const char *cstr = str.c_str();
但这有什么办法吗?我不喜欢制作一个新的变量。我尝试使用lambda但是没有用。
答案 0 :(得分:5)
不,没有办法解决它。
函数glShaderSource
需要一个指向字符缓冲区指针的指针(因为它希望你传递一个或更多 C字符串),而你不能获取地址一个右值(表达式str.c_str()
是什么)。
但这不是一个真正的问题,因为在你的最后一个例子中,你所做的就是分配一个指向指针的指针。这非常便宜和容易。
不要害怕“制作一个新的变量” - 无论如何命名的东西都很好。
答案 1 :(得分:0)
我认为问题是:为什么函数需要一个指向指针的指针?在许多具有c风格函数的情况下,它们提供这种接口,因为它们想要修改目标指针以指向其他东西(例如由函数内部创建的东西)。如果是这种情况,那么将string::c_str()
的结果分配给变量然后将其传入是有点无意义的,因为无论如何它将被重新分配以指向其他东西。
我建议您更彻底地检查此功能的文档,以确保不是这种情况(可能是这种情况)。