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

时间:2015-12-16 16:39:12

标签: c++ templates pointers member-function-pointers

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

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>

1 个答案:

答案 0 :(得分:5)

该功能的名称只是operator K。它的资格不是名称的一部分。尝试:

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