首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有不同参数的函数指针的更好设计

使用带有不同参数的函数指针的更好设计
EN

Stack Overflow用户
提问于 2011-01-14 02:12:32
回答 2查看 431关注 0票数 2

我有一个优化算法,可以找到图的最佳分区。

分区的质量有许多度量(变量被优化),所以我认为使用指向这些质量函数的函数指针,并将其传递到我的优化算法函数中是一个好主意。

这很好用,但问题是不同的质量函数采用一些不同的参数。

例如,一个质量函数是find_linearised_stability,它需要一个markov_time参数:

代码语言:javascript
复制
float find_linearised_stability(cliques::Graph<T> &my_graph, cliques::Partition &my_partition,
                               std::vector<float> &markov_times, std::vector<float> &stabilities)

并在优化函数中使用:

代码语言:javascript
复制
cliques::find_optimal_partition_louvain(my_new_graph, markov_times, &cliques::find_linearised_stability);

然而,另一个质量函数find_modularity不需要markov_time参数。当然,我可以只将它作为参数,而不在函数中使用它,但这似乎是一种糟糕的做法,而且一旦我开始添加许多不同质量的函数,它就会变得笨拙。

对于这种情况,什么是更好的设计?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-14 02:24:11

使用函数对象。其中一个函数对象可以有一个传入构造函数的markov_time成员:

代码语言:javascript
复制
struct find_linearised_stability {
    std::vector<float> & markov_times_;

    find_linearised_stability(std::vector<float> & markov_times)
        :markov_times_(markov_times)
    {}

    float operator () (cliques::Graph<T> &my_graph, cliques::Partition &my_partition,
                 std::vector<float> &stabilities)
    {
        // use markov_times_ in here, we didn't need to pass it since it's a member
    }
};

(您可能需要对一致性/参考性进行调整以满足您的需求)

然后你可以像这样调用你的函数:

代码语言:javascript
复制
cliques::find_optimal_partition_louvain(my_new_graph, cliques::find_linearised_stability(markov_times));

“声明函数时,应使用函数对象的哪种类型?”

使其成为以函数对象类型作为模板参数的函数模板,如下所示:

代码语言:javascript
复制
template<typename PR>
whatever find_optimal_partition_louvain(my_new_graph, PR & pr)
{
    ...
    pr(my_new_graph, partition, stabilities);
    ...
}
票数 6
EN

Stack Overflow用户

发布于 2011-01-14 02:20:03

您唯一的选择是boost::bind或类似它的东西,存储在一个boost::函数或类似的东西中。

如果分析显示太慢,那么你将被困在“糟糕的实践”版本中,因为任何替代方案都将与UB发生冲突,并且/或者最终与更合理的替代方案一样“慢”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4683585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档