C ++将类方法作为函数指针传递

问题描述 投票:0回答:1

我有一个必须处理各种文件中的数据的类。我考虑过创建一个函数,该函数将读取指定的文件,然后还接受回调,以便它可以使用该函数来处理行。下面是一个示例类,代表我要执行的操作:

#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 ++中做到这一点?我该怎么办?

c++ visual-studio-2019 member-function-pointers
1个回答
3
投票

在这种情况下,您需要明确说明内容:

    processFile(path, &Example::doSomething);

此外,由于运算符的优先级,您还需要附加一对括号:

         (this->*fpProcessLine)(line);
© www.soinside.com 2019 - 2024. All rights reserved.