2

我试图存储functors在 astl map然后一个一个地调用它,但现在确定如何调用它。这是我到目前为止所尝试的。

#include <iostream>
#include <map>
#include <string>

class BaseFunctor {
public:
  BaseFunctor() {
  }
  ~BaseFunctor() {
  }
};

template <typename T>
class MyFunctor : public BaseFunctor {
   public:
     T operator()(T x) { 
       return x * 2;
     }
};

int main ( int argc, char**argv ) {
  std::map<std::string, BaseFunctor*> m_functorMap;

  m_functorMap.insert(std::make_pair("int", new MyFunctor<int>()));
  m_functorMap.insert(std::make_pair("double", new MyFunctor<double>()));
  m_functorMap.insert(std::make_pair("float", new MyFunctor<float>()));
  m_functorMap.insert(std::make_pair("long", new MyFunctor<long>()));

  for ( std::map<std::string, BaseFunctor*>::iterator itr = m_functorMap.begin(); itr != m_functorMap.end(); ++itr ) {
    std::cout << *(itr->second)() << std::endl;
  }


  return 0;
}

我不能使用boost

4

1 回答 1

4

您有一张充满 的地图BaseFunctor*,但BaseFunctor由于没有 ,因此不可调用operator()。如果不强制转换为派生类型的指针,则不能调用,最好使用dynamic_cast. 总的来说,它看起来不是一个好的设计。您正在尝试使用它不能使用的运行时多态性。

于 2012-11-16T13:27:19.837 回答