我有一个作为解决方案的一部分创建的地图
enum Opcode {
OpFoo,
OpBar,
OpQux,
};
// this should be a pure virtual ("abstract") base class
class Operation {
// ...
};
class OperationFoo: public Operation {
// this should be a non-abstract derived class
};
class OperationBar: public Operation {
// this should be a non-abstract derived class too
};
std::unordered_map<Opcode, std::function<Operation *()>> factory {
{ OpFoo, []() { return new OperationFoo; } }
{ OpBar, []() { return new OperationBar; } }
{ OpQux, []() { return new OperationQux; } }
};
Opcode opc = ... // whatever
Operation *objectOfDynamicClass = factory[opc]();
但不幸的是,我的编译器 gcc-4.4.2 不支持 lambda 函数。
我想要一个使用 boost 库的替代(可读)实现。(lambda / phoenix)
有什么办法可以将 C++ std:;lambdas 和 std::functions 偷偷溜进我的编译器 -std=C++0x,像这样的选项都失败了……:(
PS:请提供一个可读的解决方案