2016-10-20 3 views
-4

私はgoogle/stack overflowなどで検索していますが、これに対して適切な解決策を見つけることができませんでした。私は最新のC++リビジョンがラムダ関数をサポートできることを知っています。また、別の関数の中で関数を定義することを避けるべきです。しかし、私はなぜC++標準の関数に関数定義を持たせることができないのだろうかと不思議です。次のようななぜC++の 'Standard'は別の関数の中で関数定義をサポートしませんか?

int print() { 
    void test(){ 
    // statements 
    } 
} 

私は人々が、これは私がここに求めているのハイライトであることを行うために、重複したとしてではなく、誰もが満足のいく答えを与えていないこれらの質問でこれをマークします知っています。

+0

ラムダをお持ちの場合はどうなりますか? – krzaq

+0

私はそれらを使用して関数を定義できることを意味します。 – Suchendra

+3

これは何らかの閉鎖メカニックなしでの使用が見られなかったためです。私たちは今持っている、彼らはラムダと呼ばれています。 – StoryTeller

答えて

-2

かなり確信することができます:

int main() { 
    auto curry = [] (auto f) { 
     return [=] (auto x) { 
      return [=] (auto y) { 
       return f(x, y); 
      }; 
     }; 
    }; 
} 
+3

OPは明示的にlambdaについては尋ねません。 – deviantfan

0
私はあなたが11日、このように、C++、事前にそれをエミュレートすることができることを今思い出し

void foo() { 
    struct detail { 
    static void bar() { 
     //statements 
    } 
    }; 

    detail::bar(); 
} 

も渡すことができることから、コールバックなどfoo以内。ただし、ここにはクロージャはありません。 barfooの変数にはアクセスできません。

+0

私たちはあなたが提供したあなたの解決策によってそれを達成することができます。しかし、なぜ私たちは別の内部の関数を定義することはできません私の質問?何らかの特別な理由はありますか?効率や性能に影響しますか? – Suchendra

+1

@Suchendra、閉鎖のメカニックはなく、コードの明瞭さ以外はプログラムのメトリックには影響しません。 – StoryTeller

関連する問題