【发布时间】:2013-11-23 06:56:47
【问题描述】:
我想创建一个模板化函数,该函数对 const 和非 const 数据的工作方式相同,只是它会根据需要返回一个 const 或非 const 指针。
例如,我想返回一个指向容器中匹配元素的指针:
template <class Container, class Pred>
typename Container::value_type* getValuePtrIf(Container& c, Pred pred)
{
auto it=std::find_if(c.begin(), c.end(), pred);
return (it!=c.end()) ? &(*it) : nullptr;
}
但是,我无法为 const 和非 const 调用构建它。如果我在 Container& c 声明中省略了 const,那么它就不能返回一个 const 指针,但是如果我更改为 const Container& c,那么我可以返回一个 const 指针,但是非 const 情况不会建立。
有没有一种方法来定义它,以便 const 被解释为 Container 模板参数的一部分,这样我只需要定义这个函数的一个版本?
【问题讨论】:
-
为什么在不修改
c的情况下需要非常量? -
我想要一个返回 const 指针的版本和一个返回非常量指针的版本
-
@MM 因为如果容器是可修改的,他想要一个指向非常量的指针作为返回值
-
C++11:
template<class C, class P> auto getValuePtrIf(C& c, P pred) -> decltype( &*c.begin() ); -
@DyP:做到了!请把它作为一个答案,我会接受它。这是只能使用 decltype 才能完成的事情吗?