我有一个必须处理各种文件中的数据的类。我考虑过创建一个函数,该函数将读取指定的文件,然后还接受回调,以便它可以使用该函数来处理行。下面是一个示例类,代表我要执行的操作:
#include <iostream>
#include <vector>
#include <string>
class Example
{
std::vector<std::string> m_exampleFileData {
"test1",
"test2",
"test3"
};
public:
void doSomethingMain(const std::string& path)
{
processFile(path, doSomething);
}
private:
void processFile(const std::string& filePath, void (Example::*fpProcessLine)(const std::string&) )
{
for (const auto& line : m_exampleFileData) {
this->*fpProcessLine(line);
}
}
void doSomething(const std::string& line)
{
std::cout << "Hello: " << line << '\n';
}
};
int main(int argc, char** argv) {
const std::string filePath{"path"};
Example ex;
ex.doSomethingMain(filePath);
}
编译器资源管理器:https://godbolt.org/z/LKoXSZ
主要问题是,无论我做什么,我似乎都无法正确将函数传递给processFile
。有没有办法在C ++中做到这一点?我该怎么办?
在这种情况下,您需要明确说明内容:
processFile(path, &Example::doSomething);
此外,由于运算符的优先级,您还需要附加一对括号:
(this->*fpProcessLine)(line);