C 中是否允許在函式中定義函式?

時間 2021-06-07 16:29:49

1樓:暗能量泡泡

C++不能支援直接在函式中定義函式。C++11通過支援Lambda函式(實際上是個匿名class的物件)來實現類似功能。其他方式可以使用函式中定義struct/class的方式再定義其靜態成員函式的方式來模擬一樣的效果。

2樓:Johnny Wong

可以使用class/struct的實現,它們支援巢狀定義,我提供乙個最簡單的版本

void foo(int n)

{ struct funcvoid operator () (int nstd::cout << "func " << n << std::endlfunc;

for (int i=0; i

如果使用更加高階的實現的話,可以參考

boost::function

如果沒有耐心,直接使用 c++ 11 lambda.

直接支援函式巢狀定義的標準,好像還沒有;至於一些編譯器和擴充套件庫實現的,思路和上文舉例類似。

3樓:陳良喬

#include

using namespace std;

void foo()

{/* error!

void innerfoo()

{cout<<"inner function"<如上面的例子所示,無法直接在函式內部定義另外乙個函式

但是,可以採用函式物件或者Lambda表示式間接地實現

4樓:Cascade

你說的這種巢狀定義標準沒說可以有。所以不是不能有。

某些編譯器作為擴充套件功能支援函式的巢狀定義。

由於類可以巢狀定義,所以你可以定義乙個類,然後寫乙個過載()的方法進去。

C++11說,你可以用lambda function。

C 中的sort函式使用自定義比較函式的具體執行過程是怎麼樣的呢

路明非 你只是覺得實現降序排序比較神奇,但對於演算法來說都是一樣的。對於函式bool f a,b a b 只要任意兩個數字滿足自洽性就可以了,所謂自洽性就是如果a b返回true,b c返回true,則a c一定返回true。當然還要其他條件,這樣可以保證你的輸入序列的有序性。演算法唯一需要做的就是...

C 中如何定義指向函式指標的指標?

zr scat 瀉藥先定義乙個函式指標 typedef void pfn void 再定義指向函式指標的指標 void print void pfn func print pfn ptr func 在c 11下,可以這麼偷懶獲得型別 1 include 23using namespace std 4...

在C 中如何實現復合多個函式的高階函式

guohc FuncCombinator的引數不固定所以只能傳入delegate的陣列。static void Main string args static Func FuncCombinator Delegate da TResult result TResult param return re...