在C ++ 17中,如何使用this
创建非静态成员指针函数的向量并随后调用这些函数?
Example.hpp
class Example{
public:
Example();
void function1();
void function2();
};
Example.cpp(伪代码)
Example::Example(){
std::vector<void (*)()> vectorOfFunctions;
vectorOfFunctions.push_back(&this->function1);
vectorOfFunctions.push_back(&this->function2);
vectorOfFunctions[0]();
vectorOfFunctions[1]();
}
void Example::Function1(){
std::cout << "Function 1" << std::endl;
}
void Example::Function2(){
std::cout << "Function 2" << std::endl;
}
答案 0 :(得分:3)
您可以使用std::function
代替指向成员的指针:
std::vector<std::function<void()>> vectorOfFunctions;
vectorOfFunctions.push_back(std::bind(&Example::function1, this));
vectorOfFunctions.push_back(std::bind(&Example::function2, this));
这使您可以概括向量以容纳静态成员函数或其他类型的函数。
答案 1 :(得分:3)
如果要坚持成员函数指针,应该是
std::vector<void (Example::*)()> vectorOfFunctions;
// ^^^^^^^^^
vectorOfFunctions.push_back(&Example::function1);
vectorOfFunctions.push_back(&Example::function2);
并像调用它们一样
(this->*vectorOfFunctions[0])();
(this->*vectorOfFunctions[1])();
顺便说一句:作为Jans's answer的补充,您还可以将std::function
与lambda一起使用,例如
std::vector<std::function<void ()>> vectorOfFunctions;
vectorOfFunctions.push_back([this]() { this->function1(); });
vectorOfFunctions.push_back([this]() { this->function2(); });
vectorOfFunctions[0]();
vectorOfFunctions[1]();