【发布时间】:2018-12-04 01:16:01
【问题描述】:
CursorMove::CursorMove(char& dir)
{
if(dir == 'd')
{
this->execute = CursorMove::moveRight;
}
else if(dir == 'a')
{
this->execute = CursorMove::moveLeft;
}
else if(dir == 'w')
{
this->execute = CursorMove::moveUp;
}
else if(dir == 's')
{
this->execute = CursorMove::moveDown;
}
}
我目前正在处理一个 CS 项目,我们必须能够使用键盘移动光标。教授希望通过类来完成,因为我们将使用一个 while 循环来不断检查用户输入,然后只有一个父类将调用其执行。每个独特的执行都属于其自己的类。我认为尝试将光标移动的命令合并为一个可能会更容易。我的想法是使用名为 moveRight、moveLeft、moveUp 和 moveDown 的公共静态函数,它们都具有与 execute 相同的参数,并相应地分配以在构造期间执行。哪一个由名为“dir”的参数决定。
我目前遇到的错误是“必须调用对非静态成员函数的引用”。与其解决错误,我更好奇这是否是一个可行的想法,或者我是否最好忽略它并为每个人创建一个类。
【问题讨论】:
-
只有当
execute被声明为std::function,或者至少是一个普通的function pointer 时,你所要求的才能完成。但如果它被实现为自己的实际类方法,则不会。 -
这里的
char&中没有&的理由。 -
你可能想改写
&CursorMove::moveRight。 -
这是一个聪明的主意。但我看不出这里有任何使用面向对象编程的理由。似乎只是需要用户输入和命令列表之间的映射。
-
是的,这完全合理。如果您遇到问题,请提供您一直在调试问题的minimal reproducible example,以便我们为您提供帮助。
标签: c++