【发布时间】:2013-03-19 17:13:53
【问题描述】:
不知道如何更好地改写标题。
我想将低级代码移到简单函数之外,并将代码移到类中,以便类处理更复杂的东西。
我想从这里开始:
void a(void) {
[low level operation];
//User typed simple operations
[low level operation];
}
static void AClass::b() {
register(a); //register(void (__cdecl *func)())
}
int main(void) {
AClass::b();
return 0;
}
收件人:
void a(void) {
//[no low level operation]
//User typed simple operations
//[no low level operation]
}
static void AClass::b(void (*func)()) {
auto funcA = [] (void (*func)()) -> void (*)() {
[that first low level operation];
func(); //Which is: void a(void);
[the second low level operation];
};
register(funcA(func));
}
int main(void) {
AClass::b(&a);
return 0;
}
目前我收到错误“::operator ()' : function must return a value” - 因为指针。我该如何解决这个问题?只返回 void 是行不通的。通过引用 lambda 传递参数(函数“func”)也不起作用(因为在这种情况下,lambda 不再只是一个函数而是一个类) - register(void (__cdecl *func )()) 无法转换 now not a function lambda。
任何想法如何解决我的问题?
【问题讨论】:
-
您知道
register是C++ 中的关键字吗?已弃用,但仍然存在。 -
@Cheersandhth.-Alf “注册”函数要求“void (__cdecl*)(void)”,这意味着没有参数。而且, a(void) 不是这里的问题。拉姆达是。我尝试让 lambda 返回 void (*)(void) 以便“注册”,但我不能,当然。
-
很抱歉以第一印象回答这个问题。第二印象:代码没有意义,即使意图是。而不是使用 lambda 函数等。我建议您查找“模板模式”(这与使用 C++ 模板无关)。
-
@JoachimPileborg 我在这里使用它只是为了演示。该函数实际上是在应用程序“glutDisplayFunc”中调用的——来自 Glut 库。此外,错误并不是说我使用了关键字,而是因为指针。