問題タブ [template-meta-programming]
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++ プログラム間での一意の型識別子
共通のソース コードを共有するさまざまなプログラムの型に一意の識別子を自動的に (つまり、手動ではなく) 割り当てる方法はありますか? 別の「タイプXを使用する」ことを伝えるプログラムが必要で、もう一方のプログラムはその「X」が何を意味するかを知っています。もちろん、実行時に型を構築できないため、ソースコードを (部分的に) 共有します。ある種の識別子 (整数または文字列) から、たとえば、指定された型のオブジェクトを返すファクトリ関数へのマップを自動的に構築する方法が必要です。 .
私が選ぶ明白な選択はname()
inの結果ですstd::type_info
が、私が理解しているように、それはタイプ間で異なることさえ保証されておらず、std::type_info
インスタンスのアドレスを使用することは確かにプログラム間で機能しません。
C++11 は使えませんが、Boost は使えます。
c++ - コンパイル時に型がラムダ式かどうかを検出する方法は?
my_struct
関数であるメンバー変数を囲む型f
があるとします。f
が c++11 ラムダ関数になる可能性があります。
my_struct
ラムダ オブジェクトへの代入は違法なので、 がラムダの場合は代入されないようにの代入演算子を実装したいと思いますf
。
is_lambda
型のラムダ性を検査できる型特性を構築することは可能ですか?
コード内:
c++ - C ++メソッドでテンプレートクラスを作成しますか?
このファイルにすべてのクラスTを含めることなく、次のことを行うにはどうすればよいですか?:
基本的に、ジェネリッククラスのインスタンス化機能が必要です。どこにでもヘッダーを含めずにこれを達成するにはどうすればよいですか?
c++ - テンプレート クラスを削除した後のメモリ リーク
次のクラスがある場合:
- temp を削除するとメモリ リークが発生しますか?
- プログラムが T のサイズを知らないからですか?
- もしそうなら、どうすればそれを避けることができますか?
c++ - テンプレート メタプログラミングで数える?
私はしばらくの間、この問題 (オンとオフ) に対する創造的な解決策を考え出そうと試みてきましたが、まだできていません。私は最近、テンプレートのメタプログラミングで解決できるかもしれないと考えましたが、テクニックの経験が比較的少ないため確信が持てません.
テンプレート メタプログラミング (または C++ 言語の他のメカニズム) を使用して、各派生クラスに一意の静的クラス識別子が与えられるように、いくつかの基本クラスから派生したクラスの数をカウントすることは可能ですか?
前もって感謝します!
c++ - テンプレートのメタプログラミング: プリミティブ再帰?
この記事で、筆者は次のように主張しています。
...プログラムは、テンプレートのインスタンス化メカニズムが、コンパイル時に重要な計算を実行できるプリミティブな再帰言語であることを示しました。
原始再帰関数の理論を掘り下げる計算理論のクラスを教えるのを手伝っているので、これはかなり興味深いと思いました。しかし、テンプレート メタプログラミングはチューリング完全であるという印象を受けました。これは、原始的な再帰的であると言うよりも厳密に強いステートメントです...そして結局のところ、停止に失敗するテンプレート メタプログラムを作成することはそれほど難しくありません。 .
何か不足していますか?Template Metaprogramming は厳密にプリミティブな再帰言語ですか、それともより広い範囲のプログラムをカバーすると信じているのは正しいですか?
c++ - 逆参照可能な型の value_type を取得する
derefernable 型に対して次のことを達成するにはどうすればよいですか?
動作させたいすべてのタイプに対してクラステンプレートの特殊化を行う必要があるため、現在のソリューションが不足していることがわかります。
途中で何かを試しましたが、うまくいきません。
c++ - operator<< スマート ポインターのオーバーロード
operator<< をオーバーロードして、 で動作できるようにしたいと思いshared_ptr
ます。
私の最初の試みは次のとおりですが、問題は、どのクラスの動作も有効にすることです。
私の2番目の試みは次のとおりです。
このソリューションの問題は、T
自動的に推定できないため、foo を継承する型では機能しません。
したがって、スキップU
して代わりに使用することもできますT
。その場合、 T は 2 番目の引数から推定され、 の引数o
は に変換できますfoo<T>
。
ただし、次の場合は機能しません。
実用的なソリューションを作成する方法についてのアイデアはありますか?
c++ - 可変個引数テンプレートの連鎖
X
C++11 可変個引数テンプレートを使用するように変換され、任意の数のテンプレート引数をサポートする必要がある場合、次のコードはどのようになりますか?
c++ - メンバーの型を取得する
注: この質問は、もともと 2012 年にさかのぼって尋ねられました。decltype
指定子が主要なコンパイラによって完全に実装される前です。C++03 にしかアクセスできない場合を除き、このコードを見ないでください。すべての主要な C++11 準拠のコンパイラが をサポートするようになりdecltype
ました。
メンバーのタイプを取得する簡単な方法はありますか?
C++03 の場合
私は実際にこれを行っています(つまり、少し怠惰です):
しかし、ユーザーにメンバーの型を強制的に指定させるのではなく、コンパイラーに実用的に生成させたいのです。