函数原型,没有定义
Function prototype, without definition
我正在开发一个无法使用 类 的库。我有一个在获取 KeyDown 事件时调用的函数,我想调用一个我之前在库中设置原型的函数。
问题是,如果用户不想处理任何输入,我不想强制用户定义此函数。但是链接器不会让我定义一个没有定义的原型或设置一个默认的空定义。我能做什么?
顺便说一下,我正在使用 C++...
这是原型/
void keyDown(int virtual_keyCode);
void keyUp(int virtual_keyCode);
在 C++ 中无法重新定义函数。阅读 this 一个定义规则。
Only one definition of any variable, function, class type, enumeration type, concept (since C++20) or template is allowed in any one translation unit (some of these may have multiple declarations, but only one definition is allowed).
通过继承可以重载 class 函数。重载不等于重定义
您可以使用可以重新分配的函数指针,例如
#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
}
看起来不一样,但实际上是一样的...
我正在开发一个无法使用 类 的库。我有一个在获取 KeyDown 事件时调用的函数,我想调用一个我之前在库中设置原型的函数。 问题是,如果用户不想处理任何输入,我不想强制用户定义此函数。但是链接器不会让我定义一个没有定义的原型或设置一个默认的空定义。我能做什么? 顺便说一下,我正在使用 C++...
这是原型/
void keyDown(int virtual_keyCode);
void keyUp(int virtual_keyCode);
在 C++ 中无法重新定义函数。阅读 this 一个定义规则。
Only one definition of any variable, function, class type, enumeration type, concept (since C++20) or template is allowed in any one translation unit (some of these may have multiple declarations, but only one definition is allowed).
通过继承可以重载 class 函数。重载不等于重定义
您可以使用可以重新分配的函数指针,例如
#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
}
看起来不一样,但实际上是一样的...