1
重載方法::如何實現以下重載方法調用綁定使用升壓功能
class Foo {
void bind(const int,boost::function<int (void)> f);
void bind(const int,boost::function<std::string (void)> f);
void bind(const int,boost::function<double (void)> f);
};
首次嘗試
SomeClass c;
Foo f;
f.bind(1,boost::bind(&SomeClass::getint,ref(c));
f.bind(1,boost::bind(&SomeClass::getstring,ref(c)));
f.bind(1,boost::bind(&SomeClass::getdouble,ref(c)));
然後我發現了一個possible answer所以嘗試這樣做: -
f.bind(static_cast<void (Foo::*)(int,boost::function<int(void)>)>(1,boost::bind(&SomeClass::getint)));
這看起來很醜但可能工作嗎?
,但給錯
error C2440: 'static_cast' : cannot convert from 'boost::_bi::bind_t<R,F,L>' to 'void (__cdecl Foo::*)(int,boost::function<Signature>)'
任何想法我可以做這個工作超載。我懷疑類型擦除正在發生,但編譯器顯然識別重載的方法,因爲Foo.cpp編譯得很好
完美地工作,是的,我切換到std :: function。 我猜測沒有辦法讓編譯器通過使用工廠函數來推斷鑄造參數? – Ronnie