我在Visual Studio 2017中使用C ++ 17。我想使用lambda表达式在另一个类方法中执行一个类方法。到目前为止,我已经这样完成了:
void CMFCApplicationDlg::Add_text() {
std::ofstream outfile;
outfile.open("test.txt", std::ios_base::app);
outfile << "text added" << std::endl;
}
void CMFCApplicationDlg::Start_adding() {
sched.cron("0 12 * * *", [this]() { CMFCApplicationDlg::Add_text(); });
}
我认为这将是更好的,如果它可以发送的指针Add_text
来Start_adding
作为参数,并用lambda表达式中使用它。
我怎么能够:
如果能得到一些示例代码,我将不胜感激。
以下代码应回答您的所有问题:
#include <iostream>
class Test {
public:
// 2 test functions
void print1(int i) { std::cout << "From function print1: " << i << "\n"; }
void print2(int i) { std::cout << "From function print2: " << i << "\n"; }
void print3(int i) { std::cout << "From function print3: " << i << "\n"; }
// Function taking function pointer
void test1(void (Test::* functionPointer)(int), int para) {
std::cout << "\nFrom function test1:\n";
(*this.*functionPointer)(para);
std::cout << "\n";
}
void test2()
{
std::cout << "\ntest2. Call via other function\n";
// Calling with function pointer via other function
test1(&Test::print1, 17);
std::cout << "\ntest2. Call via function pointer\n";
// Define function pointer
void (Test::* fptr)(int) = &Test::print2;
// Call function pointer
(this->*fptr)(3);
std::cout << "\ntest2. Call via lambda\n";
// Lambda
auto lambda = [&fptr,this](const int i) { (this->*fptr)(i); };
// Call lambda
lambda(42);
}
};
如果您需要额外的移植,则可以随时进行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句