我有一个类foo
与方法bar
其中(函数指针/函数)可调用的东西。这个可调用的东西应该被传递到另一个方法doit
作为一个绑定元素与第三种方法bar_cb
方法。绑定绑定函数作为参数
#include <functional>
#include <iostream>
class foo {
public:
template<typename T>
void bar(T&& t) {
std::cout << "bar\n";
doit(std::bind(&foo::template bar_cb<T>, this, std::forward<T>(t)));
}
template<typename T>
void doit(T&& t) {
std::cout << "doit\n";
t();
}
template<typename T>
void bar_cb(T&& t) {
std::cout << "bar_cb\n";
t();
}
};
void lala() {
std::cout << "lala\n";
}
class functor {
public:
void operator()() {
std::cout << "functor::operator()\n";
}
};
int main() {
foo f;
functor fn;
f.bar(fn);
f.bar(std::bind(lala)); // error
return 0;
}
这工作正常functors
而不是绑定功能作为论据foo::bar
(lala
在我的例子)。是否有可能将一个不可知的类型传递给一个方法,并将其作为另一个参数的绑定方法(以及如何)?我知道我可以在函数中包含一个函子(例如std::function
),但由于我可以调用一个不可知类型,我认为还有一种方法可以绑定它(我想我只是缺少一些简单的东西)。
Here指向示例的链接。
什么是实际(更高级别)你正试图解决的问题? –
@JohnZwinck问题是,我想有一个类,它可以是一个函子或函数,并用这个'callable'作为参数调用其他函子。真正的代码是一个可变模板类,具有不同的函数作为模板参数。然而,我试图将问题归结为一个简单的非模板类来理解错误。我也想避免'std :: function'的开销。 – user1810087
您正在运行bind绑定表达式的特殊处理。 http://stackoverflow.com/questions/10777421/stdbind-a-bound-function –