考虑这个特殊的容器类,它存储包含键和值的类型,所以
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>
答案 0 :(得分:5)
该功能的名称只是operator K
。它的资格不是名称的一部分。尝试:
template <typename K,
typename T,
K (T::*method)() const = &T::operator K>
// ^^^^^^^^^^^^^^