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

Res*_*ion 8 c++ templates pointers member-function-pointers

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

template<typename K, typename T, K (T::*method)() const>
class Container
{
//...
};
Run Code Online (Sandbox Code Playgroud)

K是键的类型,T是一种值,方法指针用于从值中检索键.

它工作正常,但我想包含方法指针的默认值,以便当调用者没有指定它时,它将是operator K() const这样的:

template<typename K, typename T, K (T::*method)() const = &T::operator K const>
Run Code Online (Sandbox Code Playgroud)

但这并没有编译声明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>
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 5

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

template <typename K,
          typename T,
          K (T::*method)() const = &T::operator K>
//                                 ^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

  • 好点:成员的名字*不*涉及限定符(或参数).如果有必要解决过载问题,则需要通过转换为合适的成员指针来完成(在这种情况下,方便地,可以随时使用). (2认同)