我们可以动态地向我们的函数插入操作吗?

Can we dynamically insert operations to our function?

在此线程中 link,涉及对使用策略设计模式的实例的讨论。第二个答案显示了一个动态插入规则的示例,该规则是否 approve/decline 将产品分配给具有 RuleAgent 的人。这组规则是使用函数 IsApproved 调用的。

该示例显示了如果我们想再添加两个规则(例如实习生规则和加班规则)会怎样。我的问题涉及如何确保我们对 IsApproved 的多态调用会调用所有添加的规则。在对该答案的评论中也提出了这个问题,但没有回复。

能否请您评论如何在 C++ and/or(如果可能)Fortran 上执行此操作。

这个例子回避了多态性,其中代理是一个函数指针向量,可以动态地添加到和删除:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

class Person
{
public:
    int _timesheet = 50;    
    std::string _title = "Intern";
};

class Assignment
{
public:
    Person _person;
};

namespace OvertimeRule
{
bool IsApproved(Assignment const& assignment)
{
    return assignment._person._timesheet >= 40;
}   
}

namespace InternRule
{
bool IsApproved(Assignment const& assignment)
{
    return assignment._person._title == "Intern";
}   
}

int main()
{
    Assignment testAssignment;

    std::vector<bool(*)(Assignment const&)> assignmentAgent;
    assignmentAgent.push_back(&OvertimeRule::IsApproved);
    assignmentAgent.push_back(&InternRule::IsApproved);

    bool const testSuccess = std::all_of(assignmentAgent.begin(), assignmentAgent.end(), 
        [&testAssignment] (auto const& Func)
    {
        return Func(testAssignment);
    });

    if(testSuccess)
    {
        std::cout << "Requirements Met!";
    }
    else
    {
        std::cout << "Requirements Not Met!";
    }
}