说我的成员函数需要同时返回std::vector<std::pair<MyClass,double>>
和double
。两者都作为同一算法的一部分进行计算:我需要它们都从 same 成员函数返回。 (即,我不能轻易拥有两个单独的功能;这将需要重复的代码和性能开销。)
我读到最好避免使用参数in these quidelines,即:
F.20:对于“输出”输出值,更喜欢返回值来输出 参数。
所以我的代码如下:
std::pair<std::vector<std::pair<MyClass,double>>,double>
computeTransitionsAndCost(double input);
(std::pair<MyClass,double>
是一个过渡,因此是名称。)
如果没有参数,则为
std::vector<std::pair<MyClass,double>> computeTransitions(double input, double& costOut);
在后面的代码中,用户更清楚该函数返回什么:对列表。但是该指南对此表示反对,因为
返回值是自记录的,而&可以是内出也可以是外出,并且容易被误用。
是否有任何方法可以遵循准则,并且仍然确保代码的用户清楚返回值代表什么?
答案 0 :(得分:3)
为什么不返回如下所示的组合?
struct ComputedTransitions
{
struct Transition
{
MyClass description;
double weight;
};
std::vector<Transition> transitions;
double cost;
};
ComputedTransitions computeTransitions(double input);
这将使您俩都为返回值的元素赋予有意义的名称,并将所有相关数据放入一个结构中。