我將指向成員函數的指針傳遞給模板函數。事情是這樣的,調用傳遞給函數的成員函數的指針
Foo bar; /* bar.baz(...) is a function */
auto pnt = bar.baz;
passMmbFunc<...,decltype(pnt)>(...,pnt);
的passMmbFunc
這個樣子的相關部分,
template <..., typename D>
void map(..., D func) {
...
auto ret = func(someVal);
...
}
我認爲調用一個指向成員函數的語法是一樣的一個普通函數指針,但不是這樣。我得到以下錯誤,
error: must use '.*' or '->*' to call pointer-to-member function in 'func (...)', e.g. '(... ->* func) (...)'
從passMmbFunc
內,我將如何調用pnt?我知道如果你有一個相應類的對象,可以調用一個指向成員函數的指針。但是由於我將它作爲參數傳遞,情況並非如此。那麼,如果你只有一個指針而沒有對象,那麼有沒有辦法調用一個指向成員函數的指針呢?
你做了一個錯誤的假設。 – dtech
語法讓你感到沮喪,因爲(如前面的評論建議)你假設太多了。您不能在沒有對象的情況下調用指向非靜態成員函數的指針,並且語法可以確保這一點。 – PaulMcKenzie
什麼會調用成員函數,如'size()'或'to_string()'或其他什麼含義沒有相關類的實例? – Mat