我想做一個函數f(),它使用三個值來計算它的結果:a,b和e。 e依賴於a和b,所以在技術上f()只是a和b的函數。但是爲了可讀性,查看包含抽象e的函數比查看包含許多a和b的更復雜公式更容易。C++中的嵌套函數替代
有沒有什麼辦法可以像e一樣使用依賴變量而不使用嵌套函數,C++不允許這樣做?
我想做一個函數f(),它使用三個值來計算它的結果:a,b和e。 e依賴於a和b,所以在技術上f()只是a和b的函數。但是爲了可讀性,查看包含抽象e的函數比查看包含許多a和b的更復雜公式更容易。C++中的嵌套函數替代
有沒有什麼辦法可以像e一樣使用依賴變量而不使用嵌套函數,C++不允許這樣做?
C++確實有局部變量,這使得這個簡單:
double f(double const a, double const b)
{
double const e = a * b + b * b * b;
return a + b + e;
}
出了什麼問題:
int compute_e(int a, int b)
{
return whatever;
}
int func(int a, int b)
{
int e = compute_e(a, b);
}
你的第二個函數沒有返回值。 – iammilind
你可以寫一個本地的結構,可以定義靜態功能,可用於好像它的嵌套功能如下:
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);
}
'e'將是'local :: f'的輸出,所以應該從其參數和計算中刪除... –
@Tony:我描述了*技術*,而不是*計算*。 – Nawaz
您可以這樣做:
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;
}
不知道我理解你的問題,但如果你剛剛通過引入因變量使得函數更具可讀性,那麼爲什麼不在單獨函數中計算該變量呢?
float CalculateE(float a, float b)
{
return (a + b);
}
float f(float a, float b)
{
float e = CalculateE(a, b);
return a + b + e;
}
如果採用這種方法,一個選項是將CalculateE放在上面的匿名名稱空間中,這強調它只是一個支持功能,不能用於翻譯單元之外的直接使用。 –
我認爲你可以寫一些筆記。
int FuncSum(int a, int b)
{
//return the sum of a + b
return a + b ;
}
你能提供一個你想要在代碼中做什麼的例子嗎? – Kratz
Herb Sutter在他的一篇文章中介紹了這一點,他用幾種方法來模擬它:http://www.gotw.ca/gotw/058.htm –