我是一个类,看起来像这样:重载函数模板基于参数的函数参数类型
template<typename A>
struct List {
...
template<typename Fn, typename B = typename std::result_of<Fn(A)>::type>
List<B> map(Fn f) const
{ ... }
};
我想超载map
,并允许它接受作为参数A
类型的吸气剂,所以我们可以做foos.map(&Foo::bar)
,其中bar
是类别Foo
的吸气剂。下面的函数工作:
template<typename Fn, typename B = typename std::result_of<Fn(A*)>::type>
List<B> mapGet(Fn getter) const
{ ... }
但是,如果我尝试使用相同的名称map
,编译器会抱怨它的含糊不清。我的问题是,当Fn
是一个吸气器不会前std::result_of
失败,有效地禁用一个超载map
?另外,有没有办法让超载成为可能?
目前在' mapGet'我做了'(x。* getter)()',其中'x'是列表的一个元素。我不确定我是否得到你;是否有可能超载'地图',然后呢? –
@ZizhengTai你不需要两次'map'重载 - 唯一的区别是你在每个对象上调用'f'。所有其他的逻辑是一样的。 – Barry
哦,我明白你的意思了! –