我有一個類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 –