来自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 ++命名空间中完成上述操作。
答案 0 :(得分:6)
您可以使用 lambda函数:
完美地定义本地函数int TotalSum () {
auto Sum = [](float a, float b) -> float {
return a + b;
};
float x= 1.0;
float y= 1.0;
float z= 1.0;
float sum = Sum(x,y);
sum = Sum(sum,z);
return sum;
}
将函数保持为完全本地化的另一种方法可能是使用匿名命名空间。匿名命名空间中定义的元素是翻译单元的本地元素(即仅在一个cpp文件中):
namespace mylib {
namespace { // nested anonymous namespace - visible only in this cpp
float Sum (float a, float b) {
return a + b;
}
};
int TotalSum () {
...
}
}