【发布时间】:2018-01-28 17:52:36
【问题描述】:
我编写了一个小型仿函数类,它应该能够通过隐藏静态包装函数和指向对象的 void 指针来调用类成员函数。由于设置包装函数时出错,下面的示例无法编译。我想要的是一个类成员指针作为模板参数。有谁知道那里出了什么问题?
我认为调用成员函数时静态函数可能存在另一个问题。我不完全知道如何使用模板语法来做到这一点。最小示例使用启用 C++11 的 gcc 进行编译。
#include <iostream>
template<class TReturn, class... TParameter>
struct Functor {
TReturn (*ptr)(void*, TParameter...);
void *object;
template<class TObject, class TMemberFunction>
static TReturn memberCaller(void *obj, TParameter... params) {
TObject *c = static_cast<TObject*>(obj);
return (c->*(TObject::TMemberFunction))(params...);
}
TReturn operator()(TParameter... params) {
return ptr(object, params...);
}
};
class Test {
public:
void func(int a) {
std::cout << a << std::endl;
}
};
int main(int argc, const char **argv) {
Functor<void, int> f;
Test t;
f.object = &t;
f.ptr = &Functor<void, int>::memberCaller<Test, Test::func>;
f(100);
}
【问题讨论】:
-
您需要将指针传递给您要调用的
Test类的成员函数到Functor。TMemberFunction不是类型名称。其实你可以看看std::function或者fastdelegate是怎么实现的。 -
我忘了说在这种情况下没有可用的stl,因为我在嵌入式系统中使用它。
-
这与嵌入式系统有什么关系?
标签: c++ c++11 embedded functor