gpt4 book ai didi

function - C++ : using class member and static function of same name but different parameters fails

转载 作者:行者123 更新时间:2023-12-05 03:06:31 25 4
gpt4 key购买 nike

我想要一个具有静态和同名成员函数的类,并且做完全相同的事情。一次能够从实例中调用它,一次将它与标准算法中的函数一起使用。最小示例:

#include <algorithm>
#include <vector>

class foo {
public:
inline static bool isOne(const foo & s) {
return s.bar == 1;
}
// if I uncomment the next line, count_if won't compile anymore
//inline bool isOne() const { return isOne(*this); }

private:
int bar;
};

int main()
{
std::vector<foo> v;
auto numones=std::count_if(v.begin(), v.end(), foo::isOne);
return 0;
}

以上代码按预期编译和工作。但是,如果我取消注释成员函数 isOne(),因为,也许,我也想拥有

foo x; x.isOne();

在我的 main() 中,clang 6.0 和 gcc 5.3 都发生了可怕的错误。 clang错误是

no matching function for call to 'count_if'
note: candidate template ignored: couldn't infer template argument '_Predicate'
count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)

和gcc的报错基本一样,换个写法

我显然做错了,但我目前不知道如何解决这个问题。任何指点表示赞赏。

最佳答案

当获取指向重载方法的指针时,您需要告诉编译器您希望获取指向哪个重载的指针,您可以通过静态转换为适当的方法类型来实现:

 auto numones=std::count_if(v.begin(), v.end(), static_cast<bool(*)(const foo&)>(foo::isOne));

关于function - C++ : using class member and static function of same name but different parameters fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49214057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com