如何在 Visual Studio 2017 上将 class 方法设置为参数并将它们与 lambda 一起使用?
How to set class methods as parameters and use them with lambdas on Visual Studio 2017?
我在 Visual Studio 2017 年使用 C++17。我想在另一个 class 方法中执行一个 class 方法,使用 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 表达式一起使用会更好。
我怎样才能:
- 制作class方法的指针?
- 发送到另一个方法?
- 运行 它在 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);
}
};
如果您需要额外的解释,随时都可以。
我在 Visual Studio 2017 年使用 C++17。我想在另一个 class 方法中执行一个 class 方法,使用 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 表达式一起使用会更好。
我怎样才能:
- 制作class方法的指针?
- 发送到另一个方法?
- 运行 它在 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);
}
};
如果您需要额外的解释,随时都可以。