[解決済み】C++で関数の中に関数を持つことは可能か?
2022-03-28 02:49:02
質問
というような意味です。
int main()
{
void a()
{
// code
}
a();
return 0;
}
解決方法は?
モダンC++ - ラムダがあれば大丈夫!
現在のバージョンのc++(C++11、C++14、C++17)では、ラムダという形で関数の中に関数を持つことができる。
int main() {
// This declares a lambda, which can be called just like a function
auto print_message = [](std::string message)
{
std::cout << message << "\n";
};
// Prints "Hello!" 10 times
for(int i = 0; i < 10; i++) {
print_message("Hello!");
}
}
ラムダは **capture-by-reference* によってもローカル変数を変更することができます。capture-by-referenceでは、ラムダはそのラムダのスコープで宣言されたすべてのローカル変数にアクセスすることができます。この場合、ラムダはそのスコープで宣言されたすべてのローカル変数にアクセスすることができ、それらの変数を普通に修正・変更することができます。
int main() {
int i = 0;
// Captures i by reference; increments it by one
auto addOne = [&] () {
i++;
};
while(i < 10) {
addOne(); //Add 1 to i
std::cout << i << "\n";
}
}
C++98およびC++03 - 直接ではなく、ローカルクラス内の静的関数で可能です。
C++はそれを直接サポートしていない。
とはいえ、ローカルクラスを持つことはできますし、そのクラスが関数を持つこともできます(非
static
または
static
を使うことで、少し面倒ではありますが、ある程度は実現できます。
int main() // it's int, dammit!
{
struct X { // struct's as good as class
static void a()
{
}
};
X::a();
return 0;
}
しかし、プラクティスには疑問を感じます。誰もが知っている(まあ、今はともかくとして
:)
) C++はローカル関数をサポートしていないので、ローカル関数がないことに慣れているのです。しかし、そのようなごまかしには慣れていない。私はこのコードにかなりの時間をかけて、それが本当にローカル関数を許可するためだけに存在するのかどうかを確認するつもりだ。よくないですね。
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] <は<=より速いのか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] std::stringをintに変換するにはどうしたらいいですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする