2

に保存functorsしてstl mapから1つずつ呼び出しようとしていますが、呼び出し方法を確認してください。これは私がこれまでに試したことです。

#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 に答える