Rin*_*ro. 17 c++ pointers function
我希望能够根据从文件中读取的数据调用函数.因此,对于每种项目类型,我想调用所需的读者方法.我编写了这段代码,但它没有编译我想在地图中添加函数指针的地方.怎么了?
#include <vector>
#include <map>
#include <iostream>
class reader
{
  std::map< std::string, void(*)()> functionCallMap; // function pointer
  void readA(){ std::cout << "reading A\n";};
  void readB(){ std::cout << "reading B\n";};;
public:
  reader()
  {
    *functionCallMap["A"] = &reader::readA;*
    *functionCallMap["B"] = &reader::readB;*
  }
  void read()
  {
   auto (*f) = functionCallMap["A"];
   (*f)();
  }
};
我在Constructor填写地图.
小智 20
您可以使用std::functionlambda或std::bind:
class reader
{
    std::map<std::string, std::function<void()>> functionCallMap;
    void readA() { std::cout << "reading A\n"; };
    void readB() { std::cout << "reading B\n"; };
public:
    reader()
    {
        functionCallMap["A"] = [this]() { readA(); };
        functionCallMap["B"] = std::bind(&reader::readB, this);
    }
    void read()
    {
        functionCallMap["A"]();
        functionCallMap["B"]();
    }
};
sna*_*yle 17
您需要使用指向成员函数的指针,如下所示:
class reader
{
    using FuncPtr = void(reader::*)(); // function pointer
    std::map< std::string, FuncPtr> functionCallMap;
    void readA(){ std::cout << "reading A\n"; }
    void readB(){ std::cout << "reading B\n"; }
public:
    reader()
    {
        functionCallMap["A"] = &reader::readA;
        functionCallMap["B"] = &reader::readB;
    }
    void read()
    {
        auto f = functionCallMap["A"];
        (this->*f)();
    }
};
int main()
{
    reader r;
    r.read();
}