具有方法指针参数默认值的模板

Template with default value of method pointer argument

考虑这个特殊的容器 class,它在其中存储包含键和值的类型,所以

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)。甚至可以为方法指针模板参数设置默认值吗?如果是,正确的语法是什么?

编辑:除了下面的解决方案之外,还有一个 "fix" 用于 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>

函数名就是operator K。它的资格不是名称的一部分。尝试:

template <typename K,
          typename T,
          K (T::*method)() const = &T::operator K>
//                                 ^^^^^^^^^^^^^^