命名空间中的c ++本地函数

时间:2016-03-23 12:24:16

标签: c++ function namespaces nested local

来自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 ++命名空间中完成上述操作。

1 个答案:

答案 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 () {
        ... 
    }

}