gpt4 book ai didi

c++ - boost lambda 示例

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:44 24 4
gpt4 key购买 nike

我创建了一个 map 作为解决方案的一部分

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:请提供可读的解决方案

最佳答案

你可以使用 Phoenix new_:

std::unordered_map<Opcode, std::function<Operation*()>> factory {
{ OpFoo, boost::phoenix::new_<OperationFoo>() },
{ OpBar, boost::phoenix::new_<OperationBar>() },
//{ OpQux, []() { return new OperationQux; } },
};

Live On Coliru

#include <boost/phoenix.hpp>
#include <unordered_map>
#include <functional>

enum Opcode {
OpFoo,
OpBar,
OpQux,
};

namespace std
{
template<> struct hash<Opcode> : std::hash<int>{};
}


// 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, boost::phoenix::new_<OperationFoo>() },
{ OpBar, boost::phoenix::new_<OperationBar>() },
//{ OpQux, []() { return new OperationQux; } },
};

int main() {
Opcode opc = OpFoo;
Operation *objectOfDynamicClass = factory[opc]();

delete objectOfDynamicClass;
}

关于c++ - boost lambda 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26730365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com