我正在开发一个不能使用类的库。我有一个在获取KeyDown事件时调用的函数,我想调用一个我之前在库中设置原型的函数。 问题是,如果用户不想处理任何输入,我不想强制用户定义此功能。但是链接器不会让我定义没有定义的原型或设置默认的空定义。我能做什么? 我正在使用C ++ ...
这是原型/
void keyDown(int virtual_keyCode);
void keyUp(int virtual_keyCode);
答案 0 :(得分:0)
在C ++中无法重新定义函数。阅读this中的“一个定义规则”。
在任何一个翻译单元中仅允许对任何变量,函数,类类型,枚举类型,概念(自C ++ 20起)或模板进行一个定义(其中一些可能具有多个声明,但仅允许一个定义)。
继承可以重载类函数。重载与重新定义不同。
您可以使用函数指针,例如可以重新分配
#include<functional>
#include<iostream>
std::function<void(int)> keyUp = [](int) {};
void unused() {
keyUp(2);
}
void KeyUp(int i) {
std::cout << i << i << '\n';
}
int main() {
unused(); // no print
keyUp = [](int i) { std::cout << i << '\n'; };
unused(); // prints 2
keyUp = KeyUp;
unused(); // prints 22
}
看起来不一样,但实际上是一样的...