gpt4 book ai didi

c++ - 如何将返回的 ref 封装为指向 C_string 的指针?

转载 作者:行者123 更新时间:2023-11-28 05:09:04 25 4
gpt4 key购买 nike

我有一些与“X”代码交互的 C++ 代码(如在 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)

有功能:

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_p”引用封装在一个函数中,这样我就可以检查 winname_p[0] != 0,并让函数返回一个指针,但到目前为止,我正在努力让函数返回一个左值,所以我可以有类似的东西:

Xfunc(&winname_ptr(),1, et,al.)...

我还没有想出函数的返回语法,所以它返回一个左值给 winname_p。我确定这很简单很多,但在指针和函数方面我似乎有一些障碍。

最佳答案

与许多事情一样,一旦您知道答案,这就很容易了。将指针初始化为 const(以指示不应更改它):

char  * const winname_p{winname_};

然后是包装器:

char * const &XWin::winname_ptr(void) {
if (!winname_[0]) WindowName();
return winname_p;
}

以及用法:

if (XStringListToTextProperty(
const_cast<char **>(&winname_ptr()), 1, &title_) == 0) {...}

不使用 const 会更简单,但这样看起来更准确。

关于c++ - 如何将返回的 ref 封装为指向 C_string 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43905000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com