gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:14:29 25 4
gpt4 key购买 nike

在此线程中 link , 关注关于使用策略设计模式的实例的讨论。第二个答案显示了动态插入规则的示例,以确定是否批准/拒绝使用 RuleAgent 将产品分配给人员。使用函数 IsApproved 调用这组规则。

这个例子展示了如果我们想再添加两个规则,比如实习生规则和加类规则。我的问题与我们如何确保对 IsApproved 的多态调用会调用所有添加的规则有关。在对该答案的评论中也提出了这个问题,但没有回复。

您能否评论一下如何在 C++ 和/或(如果可能的话)Fortran 上执行此操作。

最佳答案

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

#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!";
}
}

关于c++ - 我们可以动态地向我们的函数插入操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57803270/

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