具有方法指针参数默认值的模板
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>
// ^^^^^^^^^^^^^^
考虑这个特殊的容器 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>
// ^^^^^^^^^^^^^^