我是C ++的新手,我尝试将find_if与模板一起使用,但它似乎并没有按我想要的方式工作。这是为什么?我试图在之前提出的有关迭代器模板的问题中找到答案,但我想我错过了正确的答案,或者可能只是没有正确理解答案。我尝试在迭代器之前使用typename,但这并没有改变错误消息。
是否有更好的方法可以做到这一点,如果有,有人可以帮我学习如何做到这一点吗?
(错误消息:错误C3867:' UserInterface :: Number':函数调用缺少参数列表,使用'& Userinterface :: Number'创建指向成员的指针)=
当发生这种情况时,我知道在函数调用之后我已经错过了(),但这次并非如此?!
#include <iostream> // std::cout
#include <algorithm> // std::find_if
#include <vector> // std::vector
template<typename T>
class UserInterface
{
public:
bool Number(int i);
void function();
};
template<typename T>
bool UserInterface<T>::Number(int i) {
return (i >= 40);
}
template<typename T>
void UserInterface<T>::function()
{
std::vector<T> myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(15);
myvector.push_back(55);
myvector.push_back(1);
myvector.push_back(65);
myvector.push_back(40);
myvector.push_back(5);
std::vector<T>::iterator it = std::find_if(myvector.begin(), myvector.end(), Number);
std::cout << "The first value over 40 is " << *it << '\n';
std::cin.get();
}
int main() {
UserInterface<int> fu;
fu.function();
return 0;
}
答案 0 :(得分:-1)
您的示例存在一些问题。第一个是std::find_if
与非静态成员方法指针不兼容。那些指针需要this
才能工作。由于UserInterface::Number
不访问任何非静态成员并且不调用任何非静态方法,因此您可以将其设置为静态。
第二个问题是你必须使用&
来获取指向你的函数的指针。
最后,请不要忘记std::vector<T>::iterator
之前的typename
。
#include <iostream> // std::cout
#include <algorithm> // std::find_if
#include <vector> // std::vector
template<typename T>
class UserInterface
{
public:
static bool Number(int i);
// ^^^^^^ Add static here
void function();
};
template<typename T>
bool UserInterface<T>::Number(int i) {
return (i >= 40);
}
template<typename T>
void UserInterface<T>::function()
{
std::vector<T> myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(15);
myvector.push_back(55);
myvector.push_back(1);
myvector.push_back(65);
myvector.push_back(40);
myvector.push_back(5);
typename std::vector<T>::iterator it =
// ^^^^^^^^ typename here
std::find_if(myvector.begin(), myvector.end(), &Number);
// ^
std::cout << "The first value over 40 is " << *it << '\n';
std::cin.get();
}
int main() {
UserInterface<int> fu;
fu.function();
return 0;
}