考慮,其存儲包含在其內部兩個鍵和值的類型的這種特殊的容器類,所以模板與方法指針參數的默認值
template<typename K, typename T, K (T::*method)() const>
class Container
{
//...
};
K是密鑰的類型,T是一種類型的值並且方法指針用於從值中檢索密鑰。
它工作正常,但我想以包括方法指針默認,這樣,當調用者沒有指定,它會operator K() const
像這樣:
template<typename K, typename T, K (T::*method)() const = &T::operator K const>
但這並不能編譯,說明有當我嘗試實例化它時(並且有這樣一種方法),它是no member operator const K on A (<- my class I test this with)
。是否有可能具有方法指針模板參數的默認值?如果是,那麼正確的語法是什麼?
編輯:除了下面的解決方案有一個「固定」的情況下,當T是一種使用新的C++ 11特徵std::remove_pointer<T>::type
一個指針,所以:
template<typename K, typename T, K (std::remove_pointer<T>::type::*method)() const = &std::remove_pointer<T>::type::operator K>
這個想法是[聲音原則](http://ideone.com/fgtF5y)。它可能只是正確拼寫特定函數名稱(轉換函數)的問題。 –
[There](http://ideone.com/k1bCEJ),也許刪除'const'? –
'operator K const'(=='operator const K')將是一個轉換函數,以及'const K'。 –