我正在尝试将functors
存储在stl 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
答案 0 :(得分:4)
您的地图中包含BaseFunctor*
,但BaseFunctor
无法调用,因为它没有operator()
。如果不转换为派生类型的指针,最好使用dynamic_cast
,则无法调用。总的来说,它看起来不是一个好的设计。您试图在不能使用的情况下使用运行时多态性。