小编cod*_*ank的帖子

C++ 0x:在std :: map中存储任何类型的std :: function

我试图在地图中存储一组std :: function(在GCC 4.5下)

我想得到两种东西:

  • 存储已传递参数的函数; 那你只需要调用f()
  • 存储没有参数的函数; 然后你必须打电话给f(...)

我想我用类Command和Manager实现了第一个:

class Command
{
  std::function<void()> f_;
  public:
    Command() {}
    Command(std::function<void()> f) : f_(f) {}

    void execute() { if(f_) f_(); }

};

class CommandManager
{
  typedef map<string, Command*> FMap;

  public :

  void add(string name, Command* cmd)
  {
     fmap1.insert(pair<string, Command*>(name, cmd));
  }

  void execute(string name)
  {
    FMap::const_iterator it = fmap1.find(name);
    if(it != fmap1.end())
    {
      Command* c = it->second;
      c->execute();
    }
  }

  private :

    FMap fmap1;

};
Run Code Online (Sandbox Code Playgroud)

可以像这样使用:

class Print{

   public:
   void print1(string s, …
Run Code Online (Sandbox Code Playgroud)

c++ bind c++11

8
推荐指数
3
解决办法
6283
查看次数

标签 统计

bind ×1

c++ ×1

c++11 ×1