【发布时间】:2019-04-02 14:05:23
【问题描述】:
我有一个类,它本质上是一个std::vector<T>,带有一些附加功能。该类具有find(const T& value ) 方法,该方法将返回value 或-1 的首次出现索引:
int my::find(const T& value) {
auto iter = std::find(this->data.begin(), this->data.end(), value);
if (iter == this->data.end())
return -1;
return std::distance(this->data.begin(), iter);
}
一切都好。然后我想创建一个find() 重载,它采用任意谓词而不是值 - 我已经尝试过:
int my::find(const std::function<bool(const T&)>& pred) {
auto iter = std::find(this->data.begin(), this->data.end(), pred);
...
}
还有:
template <typename P>
int my::find(P&& pred) {
auto iter = ...
}
但这两种情况都无法编译,因为“编译器”试图在 pred 类型值的向量中找到 pred,而不是将 pred 应用于值,即当我实例化 my<int> 时得到如下编译器错误:
/usr/include/c++/5/bits/predefined_ops.h:194:17: error: no match for ‘operator==’ (operand types are ‘int’ and ‘const std::function<bool(const int&)>’)
{ return *__it == _M_value; }
【问题讨论】:
标签: c++