以成员函数为参数的结构
Posted
技术标签:
【中文标题】以成员函数为参数的结构【英文标题】:struct with member function as parameter 【发布时间】:2015-01-26 01:14:00 【问题描述】:我是 C++ 和堆栈交换的初学者。我正在研究一个接口类,它获取键盘输入并通过循环遍历包含要比较的字符串和要输出的字符串的结构数组来检查它是否正确,具体取决于它是否等于比较字符串。如果输入正确,它将打印结构内的字符串,并调用结构内的一个函数并执行一些操作。
interface.hpp
#include <string>
class Input_Interface
struct command_output
std::string command;
std::string success_string;
std::string failure_string;
void output_function();
bool stop_loop = false;
void Clear();
void Quit_loop();
;
interface.cpp
#include <iostream>
void Input_Interface::Quit_loop()
stop_loop = true;
// ends loop and closes program
void Input_Interface::clear()
// does some action
Input_Interface::command_output clear_output"CLEAR", "CLEARED", "", Input_Interface::Clear();
Input_Interface::command_output quit_output"QUIT", "GOODBYE", "", Input_Interface::Quit_loop();
Input_Interface::command_output output_arr[]clear_output, quit_output;
void Input_Interface::begin()
while (stop_loop == false)
Input_Interface::get_input(); //stores input into var called input_str shown later
this->compare_input();
void Input_Interface::compare_input()
for (unsigned int i=0; i<2; i++)
if (this->input_str == output_arr[i].command)
std::cout << output_arr[i].success_string << std::endl;
output_arr[i].output_function();
break;
// ... goes through else for failure printing invalid if it did not match any of the command string in the command_output struct array
我的问题在于这些行
Input_Interface::command_output clear_output"CLEAR", "CLEARED", "", Input_Interface::Clear();
//error: call to non-static function without an object argument
Input_Interface::command_output quit_output"QUIT", "GOODBYE", "", Input_Interface::Quit_loop();
//error: call to non-static function without an object argument
我知道 this 是通过类的成员函数传递的,但我不知道如何解决这个问题。我不确定问题是否出在结构对象内的范围解析运算符上,因为我可以在参数之外使用它就好了。
任何帮助将不胜感激。
【问题讨论】:
我仍然需要这方面的帮助。我将 bool stop_loop 放在定义它的类中,并且不能被静态方法调用。谢谢。 【参考方案1】:你应该做如下所示的事情:
#include <string>
struct Input_Interface
struct command_output
std::string command;
void (*output_function)();
;
static void Clear();
static void Quit_loop();
;
int main()
Input_Interface::command_output t = "CLEAR", Input_Interface::Clear;
return 0;
Live example here
虽然我建议在函数指针上使用functor object。
【讨论】:
我可能应该把 stop_loop bool 放在开头。该 stop_loop bool 是在头文件内的 Interface 类中定义的,并且无法从静态方法中调用成员对象。 如果你能帮助我使用一个很棒的函数对象。我尝试使用 std::function以上是关于以成员函数为参数的结构的主要内容,如果未能解决你的问题,请参考以下文章
GroovyGroovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )