我正在尝试为 GNU Readline 编写一个 c++ 包装器,以便能够轻松使用自定义完成,但遇到了一个小问题并且想不出解决方案(我还是 c++ 新手)。
class ReadLine {
public:
ReadLine();
~ReadLine();
std::string exec ();
void enableHistory ();
private:
std::vector<std::string> keywordList;
bool history;
private:
static char** my_completion (const char*, int, int);
void* xmalloc (int);
char* generator (const char*, int);
char* dupstr (std::string);
};
cpp文件:
std::string ReadLine::exec(){
rl_attempted_completion_function = my_completion;
std::string buf = "";
buf = readline("Command>>");
//enable auto-complete
rl_bind_key('\t',rl_complete);
if (buf[0]!=0)
add_history(buf.c_str());
return buf;
}
char** ReadLine::my_completion (const char* text, int start, int end) {
char** matches;
matches = NULL;
if (start == 0)
matches = rl_completion_matches(text, my_generator);
return matches;
}
我的问题是线路
匹配 = rl_completion_matches(文本,my_generator)
它显然会抛出一个错误:call to non-static member function without an object argument
但我不想让生成器成为静态的并且我找不到它应该采用什么参数,因为我将无法访问其中的类成员(我需要关键字列表来生成关键字)。
你有什么建议?