【发布时间】:2016-07-10 17:46:55
【问题描述】:
从 ADA 开始,我在 C++ 中真正怀念一件事,那就是使用嵌套或本地函数的能力。例如,在 ADA 中,我可以这样做:
procedure TotalSum ()
is
function Sum (a : Float; b : Float) return Float;
is
begin
return a + b;
end Sum;
x : Float := 1.0;
y : Float := 1.0;
z : Float := 1.0;
sum : Float;
begin
sum := Sum(x,y);
sum := Sum(sum,z);
end TotalSum;
这样做的好处是我可以限制只在本地使用的函数的范围。对于类,我习惯了这样一个事实,即我可以声明一个私有函数以限制范围(这将范围限制到一定程度)。但是现在我在命名空间而不是类中实现了一个函数库,并且我无法找到一个很好的解决方案来限制我的本地函数的范围。
是否有在 C++ 命名空间中完成上述操作的最佳实践。
【问题讨论】:
-
我不太确定你想要达到什么目的。但是,如果您只想在 c++ 中限制这些函数的范围,只需将它们添加到命名空间(例如: sumname )并使用它们:
sumname::TotalSum()和sumname::Sum() -
匿名命名空间有什么问题?它们将本地函数的范围限制为单个翻译单元。
-
@DimChtz:我想要完成的是,我的库的用户不知道此示例中的函数 Sum()。在这个例子中,它可能真的没有意义,但在我的真实代码中,我经常实现我不希望我的库的用户直接使用的辅助函数(例如,为了防止错误使用)。
-
在这种情况下,你真的应该像@Cristophe 回答的那样使用 lambda 函数
-
@Algirdas:匿名命名空间可能正是我正在寻找的东西,我将对此进行研究...... Lambda 函数不是一个选项,因为我必须使用旧版本的 C++。
标签: c++ function namespaces nested local