gpt4 book ai didi

命名空间中的 c++ 局部函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:51 25 4
gpt4 key购买 nike

来自 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;

这样做的好处是我可以限制只在本地使用的函数的范围。对于类,我已经习惯了这样一个事实,即我可以声明一个私有(private)函数以限制范围(这将范围限制在一定范围内)。但现在我在命名空间而不是类中实现一个函数库,我一直无法找到一个很好的解决方案来限制我的本地函数的范围。

是否有在 C++ 命名空间中完成上述操作的最佳实践。

最佳答案

你可以使用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 () {
...
}

}

关于命名空间中的 c++ 局部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36178119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com