C++运行时构建嵌套函数
C++ building nesting functions during runtime
所以我正在学习C++,我正在尝试找出一种方法来基于运行时收到的输入构建一系列函数。基本思想是,我计划有一个函数来创建能力,它可以由多个动作构成,这些动作可以有多个形状,可以有多种效果。我计划的代码(尚未正确拆分函数或实际编写代码(的结构如下:
//Planned function:
/*
Ability()
{
Action 1()
{
Type of action
Shape 1 of Action 1()
{
Type of shape
Effect 1 of Shape 1 of Action 1()
{
Type of effect
}
Any more effects?
}
Any more shapes?
}
Any more actions?
}
/**/
但是我不太确定我会怎么做才能根据用户输入主动构建一组这样的嵌套函数,存储它,并将其用作我可以稍后在运行时运行而无需重建它的东西。
很抱歉,如果我只是错过了一些明显的东西,我还没有真正通过对象类。
如何根据用户输入主动构建一组嵌套的函数,存储它,并将其用作稍后可以在运行时运行的东西,而无需重建它。
所以基本上,你需要的是保存一组稍后调用的操作。在软件工程中,这称为命令模式。简而言之,每个操作(命令,动作,函数...(都被建模为一个对象,其中包含执行动作的所有必要信息以及触发(执行,执行,运行...(它的方法。通常,这些对象符合同一接口,以便您可以多态地触发它们。
在C++中,一个简单的命令可能如下所示:
class Command
{
int state_;
public:
explicit Command(int state) : state_(state) {}
void operator()() {
// do something with your state
}
};
然后,您可以存储命令列表:
std::vector<Command> commands;
commands.push_back(Command(1));
commands.push_back(Command(2));
// ...
稍后运行它们:
for (auto & c : commands)
c();
通常,您需要不同类型的命令,因此Command
将是一个抽象类,然后您将派生几个表示不同操作的不同类。
然后,为了像你所说的那样"嵌套"功能(即为了编写命令(,你可以简单地将Command
存储在其他Command
中。
当然,这是解决问题的OOP方法——你总是可以扁平化它,并编写一个等效的算法来读取一些包含所有必需参数的数据结构,并根据它们在每一步执行适当的操作;而不是将其分散在不同的类中。
最后,一个额外的说明:C++有很多东西可以调用/调用(Callable
(:函数、函数对象(如上所示(、指向成员函数的指针、lambda 表达式......如果你想走 OOP 路线并且完全通用,你可以很容易地利用 std::function
(或类似的实现,如 boost::function
for pre-C++11(,这是一个通用的多态包装器,可以存储其中任何一个。
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 如何在 C++ 的外部类构造函数中初始化嵌套类成员
- 如何使用 binary_search STL 函数在嵌套类中搜索整数?
- 嵌套模板函数采用 2 个具有相同内部类型的容器
- C++将结构传递给函数以访问嵌套结构
- C++ 在外部使用嵌套结构实现类函数
- 嵌套模板函数的重载
- 通过两个嵌套函数传递C++函数的名称
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- MSVC 2017 - 错误 - 如何将模板类 X 的模板成员函数声明为嵌套类 X::Y 的好友
- 使用嵌套函数数组是个好主意吗?
- 嵌套的模板结构构造函数实现
- C2436 '{ctor}':构造函数初始值设定项列表中的成员函数或嵌套类
- 我们可以在main函数中声明嵌套类对象吗
- C++嵌套的迭代器类(在链表类中)Insert_After函数
- 访问另一个类中的模板化嵌套类函数和对象
- Cllass 函数不解析嵌套类实例或函数
- C++析构函数嵌套类的显式模板
- C++和析构函数(嵌套类和一般问题)
- C++函数嵌套模板