問題タブ [template-classes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ヘッダーではなくソース内のクラスの部分特殊化
フー。
Foo.cpp
コンパイルすると、部分的に特殊化されたコンストラクターがエラーをスローします
宣言のネストされた名前指定子 'Foo::' は、クラス、クラス テンプレート、またはクラス テンプレートの部分的な特殊化を参照していません
この部分的に特殊化されたクラスをどこかで宣言する必要があると思いますが、同じクラスを再宣言し続ける必要はありません...つまり、ヘッダーファイルに次を配置する必要はありません。
Foo_Beta コンストラクターを使用するFoo()を構築できないからです。
私はもう試した
しかし、それもコンパイルされません。
本質的に、そのクラスにすべての内部関数を再宣言せずに、クラスの部分的な特殊化を宣言する構文は何ですか?
c++ - ストリームのさまざまな状態の定義 (C++)
(エラー状態)(ファイルオープンモード状態)などios_base
のストリームの状態の宣言があることを私は知ってい
ます。
私が知りたいのは、これらのメンバー関数の定義です
Are they a simple class or a class template ? それらはどのように実装されていますか?親クラスはどれですか(ある場合)?
ios_base::goodbit
ios_base::ate
ios_base
c++ - Doxygen 継承図: テンプレート クラス
現在、doxygen を使用してプロジェクトのドキュメントを作成しています。最近、このプロジェクトのごく一部でテンプレート プログラミングの使用が開始され、doxygen によって作成された結果の継承図は、ドキュメントの残りの部分に実際には適合しません。
小さな例:
フォームの慣性図を作成します
これは、imoを読むのが本当に難しいです。こういうミニマルな絵が見たい
、「冗長な」クラスをスキップしますA<double>, A<int>, A<float>, A<bool>
。これを行う方法はありますか?
私のDoxyfileでは、デフォルト以外の設定は次のとおりです
c++ - テンプレートクラスのネストされたクラスを正しく使用するには?
全て!シンプルなテンプレート クラスの二分探索木を実装しようとしています。関数の定義に関していくつかの問題に遭遇しました。以下は私のBSTクラスコードです
ご覧のとおり、 関数void insert(T key, BST<T>::TreeNode* leaf)
と関数については、クラスのオブジェクトを返したり、クラスで定義されたネストされた型である関数に渡したりするなど、クラスBST<T>::TreeNode* BST<T>::search(T key, TreeNode* leaf)
で処理を行う必要があります。発生しているエラーは構文エラーにありますが、コードのどこが間違っているのかわかりません。アドバイスや提案をいただければ幸いです。TreeNode
BST
c++ - テンプレートクラスオブジェクトを印刷する方法はありますか
さまざまな値を格納するためのテンプレート クラスを作成しようとしています。たとえば、任意の型の値を保持できるリストがあります。
データの値を印刷する方法はありますか。または、何らかの方法で T 型に print メソッドを指定する必要があります。私はJavaから来たので、少し混乱しました。Java では、すべてのクラスはtoString()
メソッドを持つオブジェクトから継承されます。実行時にのみ解決される T 型の値を出力するにはどうすればよいですか。
C++ のソリューションとは? または、必要なメソッドを持つクラスを基本クラス (仮想) として使用する必要があります。
どんな助けにも感謝します。
c++ - テンプレート基本クラスの静的メンバーが共有ライブラリにエクスポートされない
テンプレートクラス「TModelManager」から派生したクラス「ModelManager」があります。彼らの宣言は次のとおりです。
「共有」と「サーバー」という 2 つの共有ライブラリがあります。
「共有」ライブラリでは、DLLNETWORK は '__attribute__((visibility("default")))' に相当し、Linux システムではクラスをエクスポートします。テンプレート クラスのメンバーは次のように定義されます (cpp ファイル内)。
「サーバー」ライブラリでは、クラスが確実にインポートされるように、DLLNETWORK は空の定義です。「サーバー」ライブラリは、「共有」ライブラリに対してリンクされています。
これは問題なくコンパイルされています。
実行時に、「サーバー」ライブラリが動的に読み込まれ、「共有」ライブラリも読み込まれます。ただし、次のエラーが発生します。
「サーバー」ライブラリで「ldd」ユーティリティを使用しました。これにより、「共有」ライブラリに対してリンクされていることが確認され、それを見つけることができます。
次に、「nm」ユーティリティを使用して、TModelManager クラスに関連するすべてのシンボルを探しました。結果は次のとおりです。
「m_marked」メンバーを除いて、すべてがそこにあります。「m_models」メンバーが異なるアドレスで 2 回見つかりました。
私は本当にこれをまったく理解していません.「m_marked」メンバーは「m_models」メンバーと同じ方法で定義されているのに、なぜエクスポートされないのですか? 「m_models」メンバーが 2 回表示されるのはなぜですか?
// 編集:
「m_models」の nm-results の前にある「U」に気づきませんでした。これは、それらが未定義であることを意味します。
それらを定義するのに何か問題がありますか?