如何将返回的ref封装到指向C_字符串的指针? 我有一些C++代码与x代码接口(如X11)。对于其中一个调用,它希望参数是指向字符串的指针的地址。调用被设置为获取一个已计数的字符串数组。在本例中,它只接受1个字符串(从主机名派生的winname)。目前的情况大致如下: char winname_[257]; // to hold Cstr returned by gethostname() string windowName{}; // holding string version (prefer strings, but need // Cstr's for C-compat in places)
具有以下功能:如何将返回的ref封装到指向C_字符串的指针? 我有一些C++代码与x代码接口(如X11)。对于其中一个调用,它希望参数是指向字符串的指针的地址。调用被设置为获取一个已计数的字符串数组。在本例中,它只接受1个字符串(从主机名派生的winname)。目前的情况大致如下: char winname_[257]; // to hold Cstr returned by gethostname() string windowName{}; // holding string version (prefer strings, but need // Cstr's for C-compat in places),c++,function,pointers,C++,Function,Pointers,具有以下功能: string XWin::WindowName(string name) { if (name.size()) windowName = name; if (!windowName.size()) { gethostname(winname_, sizeof(winname_)-1); windowName = getResourceOrUseDefault(string("title"), string(winname_)); strcpy(w
string XWin::WindowName(string name) {
if (name.size()) windowName = name;
if (!windowName.size()) {
gethostname(winname_, sizeof(winname_)-1);
windowName = getResourceOrUseDefault(string("title"), string(winname_));
strcpy(winname_, windowName.c_str());
}
return windowName;
}
inline char * winname() {if (!winname[0]) WindowName();return winname;}
要传递到Xfunc,我需要:
char * winname_p = winname_;
随着X函数的执行:
Xfunc(&winname_p, 1, et, al.)
我想做的是能够在函数中封装“winname\u p”引用,这样我就可以检查winname\u p[0]!=0
,并让函数返回指针,但到目前为止,我一直在努力让函数返回
一个左值,这样我就可以得到:
Xfunc(&winname_ptr(),1, et,al.)...
我还没有弄清楚函数的返回语法,所以
它向winname\u p返回一个左值。我相信这对我来说很简单
很多,但在指针和函数方面,我似乎有一些障碍。像很多事情一样,一旦你知道答案,这很容易。 将指针初始化为常量(表示不应更改): 然后包装器:
char * const &XWin::winname_ptr(void) {
if (!winname_[0]) WindowName();
return winname_p;
}
以及用法:
if (XStringListToTextProperty(
const_cast<char **>(&winname_ptr()), 1, &title_) == 0) {...}
if(XStringListToTextProperty(
const_cast(&winname_ptr()),1,&title)==0{…}
如果不使用const会更简单,但这样看起来更准确
if (XStringListToTextProperty(
const_cast<char **>(&winname_ptr()), 1, &title_) == 0) {...}