gpt4 book ai didi

c++ - 将一个类绑定(bind)到另一个类

转载 作者:行者123 更新时间:2023-11-30 01:52:36 28 4
gpt4 key购买 nike

假设我有一个定义特定问题的类,例如,获取某个函数的值。但是这个函数只能接受特定的参数,即它们偏向于某些约束。这是一个简单的例子:

class Problem
{
private:
std::function<double(const std::vector<double>&)> d_func;
std::vector<std::pair<double,double>> d_constraints;
public:
double evaluate(const std::vector<double>& args)
{
return d_func(args);
}
bool isWithinDomain(const std::vector<double>& args)
{
/*check whether args is in the domain defined with d_constraints*/
}
};

还有另一个类 Solution,它包含一个可以传递给 Problem 中定义的函数的参数以及该函数的值:

class Solution
{
private:
std::vector<double> d_solution;
double d_value;
};

我可以有很多可能的 Solution,但它们都有相同的边界和要传递的函数。所以我的问题是:将 Problem 的信息合并到 Solution 中的最佳方法是什么?一种解决方案是在 Solution 中有一个指向 Problem 的指针,因此如果 Problem 中的约束或函数发生更改,我们就有一个更新版本它在每个 Solution 实例中。但由于 c++11 不赞成使用原始指针,所以我可能不得不使用 shared_ptr,但它们存在性能问题......

非常感谢任何帮助!

最佳答案

  1. 原始指针不会(也永远不会)弃用。 拥有 原始指针已被弃用(或实际上不鼓励)。如果您有其他人拥有 Problem 实例,那么在 Solution 中有一个指向它们的原始指针就可以了。当然,您必须确保没有SolutionProblem 更有效。

  2. 但是,如果您希望 Solution 拥有 Problem 对象,您可能应该转向共享所有权。你提到 std::shared_ptr 有性能问题 - 你到底是什么意思?是的,复制或销毁 shared_ptr 需要原子操作,但取消引用不需要。您是否进行了任何分析以确保这将是一个实际问题?

    永远不要基于某些事情效率太低的感觉来做出重要的设计决策。始终先测量。

关于c++ - 将一个类绑定(bind)到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24301629/

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