方法指針我有這樣的功能:模板在鐺VS GCC和MSVC
template <typename T, void (T::*pf)()>
void call(T& t)
{
(t.*pf)();
}
如果我有foo
類與適當的簽名的方法(比如bar
)我可以這樣調用call<foo, &foo::bar>();
,它的精細。但是,如果bar
是const
gcc和msvc很樂意在調用像這樣的call<const foo, &foo::bar>()
時編譯它。鏗鏘聲稱第二個模板參數無效。當我將const
放在模板參數()中時,所有的樹都會編譯它。
現在,這不是一個大問題,但是如果我不必在模板參數中編寫這個可憐的const
,我的代碼將變得更加乾淨。
所以問題基本上是:標準對此有何評論?這是一個鏗鏘聲bug還是gcc和msvc只是讓它滑動,因爲它們很酷?
PS這裏有一個完整的攝製程序的鏈接:http://codepad.org/wDBdGvSN
Clang在這裏,指向const限定成員函數的指針的類型是'R(C :: *)(Args)const',不能轉換爲非const類型。 – Xeo 2013-03-08 12:10:39
但是我猜你可能會說'R(C :: *)(Args)const'與這個(無效但可以理解)相同:'R(const C :: *)(Args)' – 2013-03-08 12:17:00
不,它不是一模一樣。前一個版本仍然可以在非const的'C'對象上完美調用。 – Xeo 2013-03-08 12:18:49