C++

  1. 動的および静的ポリモーフィズム

    ポリモーフィズムとは、異なる型が同じインターフェイスをサポートするという特性です。 C++ では、動的ポリモーフィズムと静的ポリモーフィズムを区別します。 これで、テンプレートに関する基本、詳細、およびテクニックが完了しました。テンプレートを使用したデザインについて書きましょう。ポリモーフィズムには多くの種類がありますが、1 つの側面に集中したいと思います。ポリモーフィズムのディスパッチは実行時またはコンパイル時に行われますか?ランタイム ポリモーフィズムは C++ のオブジェクト指向と仮想関数に基づいており、コンパイル時ポリモーフィズムはテンプレートに基づいています。 どちらのポリモ

  2. 動的ポリモーフィズムと静的ポリモーフィズムの詳細

    前回の投稿「動的および静的ポリモーフィズム」で、動的ポリモーフィズムを紹介しました。今日は、静的ポリモーフィズムを続けて、C++ の非常に興味深いイディオムを紹介します:不思議な繰り返しテンプレート パターン (CRTP)。 短い要約。これは前回の投稿で残した場所です。 動的ポリモーフィズムはオブジェクト指向に基づいており、インターフェイスとクラス階層の実装を分離することができます。レイト ダイナミック ディスパッチを取得するには、仮想性と、ポインターや参照などの間接性という 2 つの要素が必要です。次のプログラムは、動的ポリモーフィズムの例です: // dispatchDynam

  3. 式テンプレートで一時変数を避ける

    式テンプレートは通常、線形代数で使用され、「コンパイル時の計算を表す構造体であり、計算全体の効率的なコードを生成するために必要な場合にのみ評価されます」(https://en.wikipedia.org/wiki/Expression_templates )。つまり、式テンプレートは必要な場合にのみ評価されます。 この投稿では、式テンプレートの重要なアイデアのみを提供します。それらを使用するには、次のようなコンテンツをさらに学習する必要があります C++ テンプレート:David Vandervoorde、Nicolai M. Josuttis、Douglas Gregor による完

  4. ポリシー

    テンプレートのおかげで、ソフトウェア設計の新しい方法があります。ポリシーと特性は、C++ で一般的に使用される 2 つのイディオムです。 ポリシーと特性は、多くの場合、1 つの文で使用されます。ポリシーから始めましょう。 ポリシー ポリシーは、動作を構成できる汎用関数またはクラスです。通常、ポリシー パラメータにはデフォルト値があります。 std::vector そして std::unordered_map template<class T, class Allocator = std::allocator<T>> // (1)class vector; te

  5. Traits とタグ ディスパッチを使用したソフトウェア設計

    タグのディスパッチにより、型の特性に基づいて関数を選択できます。この決定はコンパイル時に行われ、特性に基づいています。 タグのディスパッチは特性に基づいています。したがって、特性について少し書きたいと思います。 特性 特性は、ジェネリック型の特性を提供するクラス テンプレートです。クラス テンプレートの 1 つまたは複数の特性を抽出できます。 すでにお気づきかもしれませんが、型特性ライブラリのメタ関数は C++ の特性の典型的な例です。それらについては、すでにいくつかの記事を書いています。 型チェック 型の比較 std::is_base_of 正しさ パフォーマンス この投

  6. C++98、C++17、C++20 による std::advance の実装

    前回の投稿で、可能性のある std::advance を提示しました タグディスパッチに基づく実装。私の読者の 1 人は、 constexpr if に基づいて std::advance を実装することもできると述べました。 、または概念。彼の権利。では、やってみましょう。 短いリマインダー: std::advance(it, n) 指定された iterator it をインクリメントします n 作 要素。 If n が負の場合、反復子はデクリメントされます。コンテナーとコンテナーによって提供される反復子に応じて、微調整されたバージョン std::advance 使用されている。この綿密

  7. コンセプトで型をチェック

    コンセプトは、型が満たされているかどうかをコンパイル時にチェックする強力で洗練されたツールです。 static_assert に感謝 、概念をスタンドアロン機能として使用できます:static_assert(Concept<T>) . C++ のクラスでよく質問があります。データ型が移動可能であることを確認するにはどうすればよいですか?ビッグ 6 間の依存関係を調べることも、ビッグ 6 の概念を定義して使用することもできます。私は前回の投稿「概念に基づいて型をチェックする - 動機」で答えの最初の部分を提示し、ビッグ 6 間の非常に洗練された依存関係について説明しました。念

  8. 範囲のある射影

    範囲ライブラリのアルゴリズムは遅延型で、コンテナーで直接動作し、簡単に構成できます。しかし、彼らが提供できるものは他にもあります。予測です。プロジェクションは、サブセットへのセットのマッピングです。この投稿で、それが何を意味するかをお見せしましょう: 前回の投稿「C++20 の Ranges ライブラリ:詳細」を std::sort の比較で締めくくりました と std::ranges::sort . std::ranges::sort の 2 つのオーバーロードを次に示します。 : template <std::random_access_iterator I, std:

  9. レンジ アルゴリズムを使用したセンチネルとコンセプト

    C++20 の範囲ライブラリはセンチネルをサポートしています。センチネルは範囲の終わりを表し、一般化された終了イテレータと見なすことができます。 begin iterator と end Sentinel によって提供される範囲は、反復できるアイテムのグループを指定します。 STL のコンテナーは、終了イテレーターが範囲の終わりをマークするため、範囲です。 センチネル 次の例では、C 文字列と std::vector<int> にセンチネルを使用しています。 . // sentinel.cpp#include <iostream>#include <algo

  10. 改善された範囲付き反復子

    従来の標準テンプレート ライブラリよりも範囲ライブラリを優先する理由は他にもあります。範囲反復子は、統一されたルックアップ ルールをサポートし、追加の安全性保証を提供します。 統一ルックアップ ルール begin を呼び出す汎用関数を実装するとします。 特定のコンテナで。問題は、begin を呼び出す関数が コンテナでは、無料の begin を想定する必要があります 関数またはメンバー関数 begin ? // begin.cpp#include <cstddef>#include <iostream>#include <ranges>struct

  11. C++23 での範囲の改善

    C++23 のおかげで、コンテナーの作成がより便利になります。さらに、範囲ライブラリに新しいビューが追加されました。 範囲 C++23 は、C++11 や C++20 ほど重要な標準ではありません。これは、C++17 の伝統に則ったものです。これは主に COVID-19 の影響によるもので、年 4 回の対面会議がオンラインになったためです。基本的に、範囲ライブラリはこの規則の例外です。範囲には、いくつかの重要な追加が行われます。 C++23 に期待できることについて詳しく知っている場合は (それについて書く前に)、cppreference.com/compiler_support

  12. C++ を使用したデザイン パターンとアーキテクチャ パターン:最初の概要

    前回の調査に基づいて、「次にどのメンタリング プログラムを実装する必要がありますか?」 「C++ を使用したデザイン パターンとアーキテクチャ パターン」について書くことへの需要が大きいことを認識しました。今日は、今後の投稿の計画を紹介したいと思います。 この紹介記事を「C++ を使用したデザイン パターンとアーキテクチャ パターン」と呼んでいますが、この記事シリーズの焦点はもっと広いものです。また、基本的な用語、イディオム、同時実行パターンについても書いています。この画像には 2 つの目的があります。 それは私の計画の最初のアイデアをあなたに与えます.これは、何が期待できるかを知

  13. パターンの利点

    今後の投稿でパターンについて書く前に、まず 1 つの質問に答えなければなりません。パターンの利点は何ですか?ご想像のとおり、私には多くの利点がありますが、それらを 3 つのポイントに要約します:明確に定義された用語、改善されたドキュメント、および最高のものから学ぶことです。 デザインパターンについての最初の講演を行いました。これは 2002 年から 2008 年頃のことです。なぜですか? パターンは、現代のソフトウェア開発においておそらく最も価値があり、影響力のある抽象化です。 では、大事なことを書かせてください。 パターンの利点 私の議論は 3 つの事実に基づいています:明確に定

  14. パターンの歴史

    ほとんどのソフトウェア開発者は、1994 年に出版された本「デザイン パターン:再利用可能なオブジェクト指向ソフトウェアの要素」がパターンの誕生を表していると想定しています。いいえ。この用語は 1977 年に Christopher Alexander によって造られました。 重要な人物とその著書を含む私の歴史的な回り道を始めましょう。この回り道は決して完全ではありません。 パターンの歴史 クリストファー・アレクサンダー パターンのアイデアはクリストファー・アレクサンダーにまでさかのぼります。彼は著書の中で「フォームの合成に関するメモ、都市は木ではない」、「

  15. C++ コア ガイドラインの説明:最新の C++ のベスト プラクティス

    私の本「C++ Core Guidelines Explained:Best Practices for Modern C++」の 5 つのバウチャーを差し上げます。代わりに、最新の C++ について質問があります。あなたにとって最も影響力のある C++11/14/17 の機能はどれですか? まず、私の本から期待できることは次のとおりです。 C++ のエキスパート インストラクターである Rainer Grimm は、C++ プログラミング言語を学習している学生に最も価値のあるコア ガイドラインのアクセス可能で実用的な範囲を提供します。 Grimm は、新しい洞察、不可欠なコンテキス

  16. トレーニングまたは指導:違いは?

    トレーニングとメンタリングは、明確に定義された方法でスキルを向上させるという 1 つの目標を目指しています。どちらも同じ目標を目指していますが、使用する方法は大きく異なります。 1 つはニーズに合うかもしれませんが、もう 1 つはそうではありません。 最初に、短い免責事項を言わなければなりません。 免責事項 この投稿の比較は、トレーナーおよびメンターとしての私の経験によるものです。ほぼ 20 年間、私はさまざまな方法でトレーニングと指導を行ってきました。オンサイトまたはオンラインで、企業や個人を対象としています。 2016 年以来、私はプロの C++ および Python トレ

  17. デザイン パターンの分類

    パターンはさまざまな方法で分類できます。最も顕著なものは、書籍「デザイン パターン:再利用可能なオブジェクト指向ソフトウェアの要素」および「パターン指向ソフトウェア アーキテクチャ、第 1 巻」で使用されているものです。 まず、『デザイン パターン:再利用可能なオブジェクト指向ソフトウェアの要素』という本の分類から時系列で説明します。 デザイン パターン:再利用可能なオブジェクト指向ソフトウェアの要素 次の表は、この本で紹介されている 23 のパターンの最初の概要です。 表を調べると、2 つの分類を観察できます。 1 つ目は、創造パターン、構造パターン、行動パターン、2 つ目は、

  18. パターンの分類

    前回の投稿では、独創的な本「デザイン パターン:再利用可能なオブジェクト指向ソフトウェアの要素」に基づくデザイン パターンの分類を紹介しました。今日、私は、2 番目の重要な書籍「パターン指向ソフトウェア アーキテクチャ、第 1 巻」に基づいた、より一般的なパターンの分類を紹介します。 あなたはすでにそれに気づいているかもしれません。前回の記事「デザインパターンの分類」ではデザインパターンについての分類でしたが、今回の記事「パターンの分類」ではパターンについてです。 「パターン指向ソフトウェア アーキテクチャ、第 1 巻」(略して POSA 1) の分類は、「デザイン パターン:再利用可能

  19. アルゴリズム、フレームワーク、パターンの関係について

    パターンは孤立して存在するのではなく、相互に関連しています。関係とは、それらが互いに対照的であること、接続されていること、一連のパターンを構築していること、パターンのリポジトリを構築していること、さらにはパターン言語であることを意味します。これらの関係をさらに掘り下げてみましょう。 デザインパターン、アルゴリズム、フレームワークという用語には共通点があります。それらを区別しましょう。 デザイン パターン、アルゴリズム、フレームワークについて これら 3 つの用語の違いについて説明する前に、簡潔な定義を次に示します。 デザイン パターン :各パターンは 3 つの部分からなるルールで

  20. アンチパターン

    アンチパターンは、自分の足を撃つための実証済みの方法です。アンチパターンという用語は Andrew Koenig によって造られたもので、それらについて読むのはとても楽しいものです。 1994 年に出版された本「デザイン パターン:再利用可能なオブジェクト指向ソフトウェアの要素」(デザイン パターン) では、アンチパターンを「一般的に使用されるプロセス、構造、またはアクションのパターン」と定義しています。問題に対する適切かつ効果的な対応は、良い結果よりも悪い結果の方が多い . 1998 年に、書籍「アンチパターン:危機に瀕したソフトウェア、アーキテクチャ、およびプロジェクトのリファク

Total 11615 -C プログラミング  FirstPage PreviousPage NextPage LastPage CurrentPage:581/581  20-C プログラミング/Page Goto:1 575 576 577 578 579 580 581