3
當我想將成員函數作爲模板參數時,有沒有一種方法可以在不提供Caller
類型的情況下進行構造?使用成員函數指針作爲模板參數時的演繹類型
struct Foo
{
template <typename Caller, void (Caller::*Func)(int)>
void call(Caller * c) { (c->*Func)(6); }
};
struct Bar
{
void start()
{
Foo f;
f.call<Bar, &Bar::printNumber>(this);
^^^^
}
void printNumber(int i) { std::cout << i; }
};
int main()
{
Bar b;
b.start();
return 0;
}
當我嘗試
template <void (Caller::*Func)(int), typename Caller>
void call(Caller * c) { (c->*Func)(6); }
,並調用它像
f.call<&Bar::printNumber>(this);
我得到Caller is not class...
錯誤。
那麼,有沒有辦法讓編譯器推斷出來電類型?
非常感謝!我甚至不知道爲什麼我會嘗試將它代替常規參數進行構造:)再次感謝您 – relaxxx 2012-04-19 16:41:14