我一直在尋找在emulated version of nullptr見到了這個轉換操作符(nullptr_t的成員):如何模板變換運營商成員函數指針語法工作
template<class C, class T> // or any type of null
operator T C::*() const // member pointer...
{ return 0; }
這句法成員函數指針混淆了我。我通常期望看到這樣的類型,如
R (C::*)(I1, I2, ...)
使用上面的模板,沒有輸入參數。我無法弄清楚在這種情況下類型扣除是如何工作的。我無法形成一個具體的問題,除此之外,這是如何工作的?如果我有這樣的代碼:
typedef int (MyClass::*MyTypedef)(float);
MyTypedef m = nullptr;
我猜T推導爲int,C推導到MyClass。發生什麼「浮動」?
如果將類型解析爲其組成部分,則替換更有意義。 'TC :: * [指向類型爲[T]]的類C的成員的指針',其中'[T]'被替換爲'T(P)[取P並返回[T]]的結果'T :: *)(P)[指向類型爲[函數P返回[T]]的類C的成員的指針]'。請參閱http://stackoverflow.com/questions/17142130/what-are-the-expression-syntax-over-types-c-support/17147477#17147477 – willj