我必須將函數傳遞到指針。爲此,我使用boost :: function。捕獲指針的函數對於不同的簽名來說是過載的。例如:指針功能
void Foo(boost::function<int()>) { ... }
void Foo(boost::function<float()>) { ... }
void Foo(boost::function<double()>) { ... }
現在我想通過一些類方法的指針有:
class test
{
public:
float toCall() { };
};
class Wrapper
{
Wrapper() {
test obj;
Foo(boost::bind(&test::toCall, this));
}
};
error: no matching function for call to ‘Foo(boost::_bi::bind_t<float, boost::_mfi::mf0<float, test>, boost::_bi::list1<boost::_bi::value<Wrapper*> > >)’
note: candidates are: Foo(boost::function<float()>&)
對於助推功能,場景甚至比這更邪惡。它就像'template struct A {template A(U); };'現在,* *看起來不能解決我的問題xD請注意,如果只有一個函數,你可以轉換。難點是*比較*兩個這樣的轉換序列。在boost :: function的情況下,這是完全不可能的,在你的情況下,它可能是可能的,但它對於over-res來說太複雜了。 –
2010-08-30 23:42:50
@Johannes Schaub:你說得對。我的例子說明了一個完全不同的問題:歧義而不是「不可解決」:) – AnT 2010-08-30 23:47:36