哪个更好/更清洁?具有相同签名或直接调用的函数的向量

时间:2018-10-22 09:12:36

标签: c++

在像〜15 之类的函数之间进行依次调用或使函数成为矢量之间,哪个更好/更干净?为什么?它们具有相同的签名,但功能不同,例如:

int a = 5, b = 7;

直接调用函数


showProduct(a, b);
showSum(a, b);
showDifference(a, b);
showRatio(a, b);
showSomeSortOfComplexOperation(a, b);

函数向量


std::vector<void (*)(int, int)> operations = {showProduct, showSum, 
    showDifference, showRatio, showSomeSortOfComplexOperation};
for (const auto& operation : operations)
    operation(a, b);

2 个答案:

答案 0 :(得分:2)

从根本上讲,除非您“必须”,否则不应通过指针调用函数。其中涉及性能成本,尽管您可能不会注意到这很小的一个成本,除非您经常打电话给他们。

第一个代码也很容易阅读,这是我的默认建议。

但一如既往,这取决于您在做什么。如果您需要能够以编程方式“遍历”函数调用,那么第二个示例更合适。

您还可以考虑将某些功能组合在一起,因此,不是依次具有15个功能,而是依次具有5个与主题相关的功能,每个功能依次调用3个功能。这是否有意义取决于函数的含义,您对数据的处理方式,应用程序的上下文以及其他只有您可以决定的事情。

答案 1 :(得分:2)

如果必须始终以相同的顺序对值(a,b)的组合使用相同的方法。 我建议使用“ C”类,并将您的函数实现为方法。

c.showProduct();
c.showSum();
c.showDifference();
c.showRatio();
c.showSomeSortOfComplexOperation();

也许也是

c.showAll();

或添加一些易于使用的模式。 就像构建器模式一样:

c.showRatio().showSum();