Рассмотрим этот специальный контейнерный класс, в котором хранятся типы, содержащие как ключ, так и значение.
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 является указателем, который использует новую функцию С++ 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>
const? - person Kerrek SB   schedule 16.12.2015operator K const(==operator const K) будет функцией преобразования, ну, в общем,const K. - person T.C.   schedule 16.12.2015