2011-07-29 43 views
2

我想做一個函數f(),它使用三個值來計算它的結果:a,b和e。 e依賴於a和b,所以在技術上f()只是a和b的函數。但是爲了可讀性,查看包含抽象e的函數比查看包含許多a和b的更復雜公式更容易。C++中的嵌套函數替代

有沒有什麼辦法可以像e一樣使用依賴變量而不使用嵌套函數,C++不允許這樣做?

+2

你能提供一個你想要在代碼中做什麼的例子嗎? – Kratz

+3

Herb Sutter在他的一篇文章中介紹了這一點,他用幾種方法來模擬它:http://www.gotw.ca/gotw/058.htm –

回答

4

C++確實有局部變量,這使得這個簡單:

double f(double const a, double const b) 
{ 
    double const e = a * b + b * b * b; 
    return a + b + e; 
} 
1

出了什麼問題:

int compute_e(int a, int b) 
{ 
    return whatever; 
} 

int func(int a, int b) 
{ 
    int e = compute_e(a, b); 
} 
+1

你的第二個函數沒有返回值。 – iammilind

2

你可以寫一個本地的結構,可以定義靜態功能,可用於好像它的嵌套功能如下:

int f(int a, int b) 
{ 
    struct local 
    { 
     static int f(int a, int b, int e) 
     { 
      return e * (a + b); 
     } 
    }; 
    return local::f(a,b, a*b); 
} 
+0

'e'將是'local :: f'的輸出,所以應該從其參數和計算中刪除... –

+0

@Tony:我描述了*技術*,而不是*計算*。 – Nawaz

1

您可以這樣做:

int f(int a, int b) 
{ 
    struct LocalFunc 
    { 
     int operator()(int a, int b) 
     { 
      return a*b + b*b*b; 
     } 
    }; 
    LocalFunc e; 
    return e(a,b)*a+b; 
} 
2

不知道我理解你的問題,但如果你剛剛通過引入因變量使得函數更具可讀性,那麼爲什麼不在單獨函數中計算該變量呢?

float CalculateE(float a, float b) 
{ 
    return (a + b); 
} 

float f(float a, float b) 
{ 
    float e = CalculateE(a, b); 
    return a + b + e; 
} 
+1

如果採用這種方法,一個選項是將CalculateE放在上面的匿名名稱空間中,這強調它只是一個支持功能,不能用於翻譯單元之外的直接使用。 –

-1

我認爲你可以寫一些筆記。

int FuncSum(int a, int b) 
{ 
    //return the sum of a + b 
    return a + b ; 
}