【发布时间】:2016-03-22 21:44:42
【问题描述】:
考虑一下这个特殊的容器类,它存储了其中包含键和值的类型,所以
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>
【问题讨论】:
-
这个想法是sound in principle。这可能只是正确拼写特定函数(转换函数)的名称的问题。
-
There,也许删除
const? -
operator K const(==operator const K) 将是一个到const K的转换函数。
标签: c++ templates pointers member-function-pointers