タグ付けされた質問 「templates」

テンプレートタグは、汎用プログラミング(特にC ++)、およびテンプレートエンジンを使用したデータ/ドキュメントの生成など、複数のコンテキストで使用されます。このタグを実装の重い質問に使用する場合-実装が記述されているコード言語にタグを付けます。

6
バインディングがnull /未定義の場合のAngularjsテンプレートのデフォルト値(フィルターあり)
Angularの日付フィルターを使用して、日付である「date」というモデル属性を表示するテンプレートバインディングがあります。 <span class="gallery-date">{{gallery.date | date:'mediumDate'}}</span> ここまでは順調ですね。ただし、現時点では、日付フィールドに値がない場合、バインディングは何も表示しません。ただし、日付がない場合は文字列 'Various'を表示したい。 バイナリ演算子を使用して基本的なロジックを取得できます。 <span class="gallery-date">{{gallery.date || 'Various'}}</span> ただし、日付フィルターを使用することはできません。 <span class="gallery-date">{{gallery.date | date:'mediumDate' || "Various"}}</span> 日付フィルターと一緒に2項演算子を使用するにはどうすればよいですか?

5
FreeMarkerテンプレートに変数が存在するかどうかを確認するにはどうすればよいですか?
テンプレートの処理時に値が提供される一連のプレースホルダーを含むFreemarkerテンプレートがあります。次のように、userName変数が指定されている場合は、条件付きでテンプレートの一部を含めます。 [#if_exists userName] Hi ${userName}, How are you? [/#if_exists] ただし、FreeMarkerのマニュアルにはif_existsが廃止されていることが示されているようですが、これを実現する別の方法を見つけることができません。もちろん、追加のブール変数isUserNameを提供して、次のように使用することもできます。 [#if isUserName] Hi ${userName}, How are you? [/#if] しかし、userNameが存在するかどうかを確認する方法がある場合は、この追加の変数を追加することを回避できます。

3
関数シグネチャでstd :: enable_ifを避ける必要があるのはなぜですか
スコットマイヤーズは、彼の次の本EC ++ 11の内容とステータスを投稿しました。この本の1つの項目は、「std::enable_if関数のシグネチャでの回避」である可能性があると書いています。 std::enable_if 関数の引数として、戻り値の型として、またはクラステンプレートまたは関数テンプレートのパラメーターとして使用して、関数またはクラスをオーバーロードの解決から条件付きで削除できます。 で、この質問すべての3つの解決策を示しています。 関数パラメーターとして: template<typename T> struct Check1 { template<typename U = T> U read(typename std::enable_if< std::is_same<U, int>::value >::type* = 0) { return 42; } template<typename U = T> U read(typename std::enable_if< std::is_same<U, double>::value >::type* = 0) { return 3.14; } }; テンプレートパラメータとして: template<typename T> struct Check2 …

13
PHP var_dump()のようにSmartyで変数をデバッグする方法
テンプレート内にいくつかの変数があり、どこに割り当てたのかわかりません。特定の変数の中に何があるかを知る必要があります。たとえば、smartyにという変数があるとしmemberます。試してみました{debug}が、機能せず、ポップアップも表示されませんでした。 var_dump()テンプレート内などを使用してsmarty変数を出力/デバッグするにはどうすればよいですか?

7
std :: function vsテンプレート
C ++ 11のおかげでstd::function、ファンクターラッパーのファミリーを受け取りました。残念ながら、私はこれらの新しい追加について悪いことだけを聞き続けます。最も人気があるのは、ひどく遅いということです。私はそれをテストしました、そして彼らはテンプレートと比較して本当に吸います。 #include <iostream> #include <functional> #include <string> #include <chrono> template <typename F> float calc1(F f) { return -1.0f * f(3.3f) + 666.0f; } float calc2(std::function<float(float)> f) { return -1.0f * f(3.3f) + 666.0f; } int main() { using namespace std::chrono; const auto tp1 = system_clock::now(); for (int i …

14
特定のタイプのみを受け入れるC ++テンプレート
Javaでは、選択したクラスを拡張するタイプのみを受け入れるジェネリッククラスを定義できます。例: public class ObservableList<T extends List> { ... } これは、「extends」キーワードを使用して行われます。 C ++でこのキーワードに相当する単純なものはありますか?
158 c++  templates 

7
std :: enable_ifでメンバー関数を条件付きでコンパイル
簡単な例を使って、使い方を理解しようとしていますstd::enable_if。この回答を読んだ後、簡単な例を考え出すのはそれほど難しくないと思いました。std::enable_if2つのメンバー関数から選択して、そのうちの1つだけを使用できるようにしたい。 残念ながら、以下はgcc 4.7でコンパイルできません。何時間も試行した後、私の間違いは何ですかと皆さんに尋ねています。 #include <utility> #include <iostream> template< class T > class Y { public: template < typename = typename std::enable_if< true >::type > T foo() { return 10; } template < typename = typename std::enable_if< false >::type > T foo() { return 10; } }; int main() { Y< …
156 c++  templates  g++  c++11 

3
std :: forwardを使用して引数を転送するのはいつですか?
C ++ 0xは、次の使用例を示していますstd::forward。 template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } いつ使用すると有利std::forwardですか? また、&&パラメーター宣言で使用する必要がありますが、すべての場合に有効ですか?関数がその中で宣言さ&&れている場合、関数に一時変数を渡す必要があると思ったので、任意のパラメーターでfooを呼び出すことができますか? 最後に、次のような関数呼び出しがある場合: template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); } 代わりにこれを使用する必要があります: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); } また、関数でパラメータを2回使用する場合、つまり2つの関数に同時に転送する場合、使用するのが賢明std::forwardですか?しませんstd::forwardメモリを移動し、二回の一時的に同じことを変換し、それが二次利用のために無効にしますか?次のコードは大丈夫でしょうか: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); doSomethingWeird<val, Params...>(std::forward<Params>(args)...); …

3
なぜ「b <a?「a <b?の代わりにa:b」b:a” maxテンプレートを実装するには?
C ++テンプレート-完全ガイド、第2版では、maxテンプレートが導入されています。 template&lt;typename T&gt; T max (T a, T b) { // if b &lt; a then yield a else yield b return b &lt; a ? a : b; } そしてそれは“b &lt; a ? a : b”代わりに使用することを説明します“a &lt; b ? b : a”: [StepanovNotes]によるmax()テンプレートは意図的に「b &lt;a?「a &lt;b?の代わりにa:b」b:a” 2つの値が等しくても等しくない場合でも、関数が正しく動作することを確認します。 「even if …
154 c++  templates 


4
テンプレートのデフォルト引数
次のことを許可されている場合: template &lt;typename T = int&gt; class Foo{ }; なぜメインで以下を行うことが許可されていないのですか? Foo me; ただし、以下を指定する必要があります。 Foo&lt;int&gt; me; C ++ 11はデフォルトのテンプレート引数を導入し、現在、それらは私の完全な理解にとらわれています。
151 c++  templates 

2
`void_t`の仕組み
私はウォルターブラウンがCppcon14で最新のテンプレートプログラミング(パートI、パートII)について語った彼のvoid_tSFINAEテクニックのプレゼンテーションを見ました。 例:すべてのテンプレート引数が正しい形式であるかどうか を評価する単純な変数テンプレートvoidがあるとします。 template&lt; class ... &gt; using void_t = void; そして、memberと呼ばれるメンバー変数の存在をチェックする次の特性: template&lt; class , class = void &gt; struct has_member : std::false_type { }; // specialized as has_member&lt; T , void &gt; or discarded (sfinae) template&lt; class T &gt; struct has_member&lt; T , void_t&lt; decltype( T::member ) &gt; &gt; …
149 c++  templates  c++14  sfinae 

3
クラステンプレートでの静的メンバーの初期化
私はこれをしたいと思います: template &lt;typename T&gt; struct S { ... static double something_relevant = 1.5; }; しかし、私something_relevantは整数型ではないのでできません。これはには依存しませんTが、既存のコードはの静的メンバーであることに依存していSます。 Sはテンプレートなので、コンパイルされたファイル内に定義を置くことはできません。この問題を解決するにはどうすればよいですか?
148 c++  templates  static 

4
クラス内でテンプレート関数を作成する方法は?(C ++)
テンプレート関数を作成できることはわかっています。 template&lt;typename T&gt; void DoSomeThing(T x){} そして、テンプレートクラスを作ることが可能です: template&lt;typename T&gt; class Object { public: int x; }; しかし、テンプレート内にないクラスを作成し、そのクラスの関数をテンプレートにすることは可能ですか?すなわち: //I have no idea if this is right, this is just how I think it would look class Object { public: template&lt;class T&gt; void DoX(){} }; または、クラスはテンプレートの一部ではないが、機能はある程度ですか?
144 c++  templates  function  class 

10
C配列の初期化「int arr [] = {e1、e2、e3、…}」の動作をstd :: arrayでエミュレートする方法は?
(注:この質問は、要素の数を指定する必要はなく、ネストされた型を直接初期化できるようにする必要があります。) この質問では、のようなC配列の残りの使用について説明しint arr[20];ます で彼の答え、@James観世ショーC配列の最後の砦の一つ、それはユニークな初期特性です: int arr[] = { 1, 3, 3, 7, 0, 4, 2, 0, 3, 1, 4, 1, 5, 9 }; 要素の数を指定する必要はありません。ここで、C ++ 11関数std::beginとstd::endfrom &lt;iterator&gt;(または独自のバリアント)を使用して反復処理します。サイズについて考える必要はありません。 今、同じことを達成する(おそらくTMP)方法はありますstd::arrayか?見栄えを良くするために許可されたマクロの使用。:) ??? std_array = { "here", "be", "elements" }; 編集:さまざまな回答からコンパイルされた中間バージョンは、次のようになります。 #include &lt;array&gt; #include &lt;utility&gt; template&lt;class T, class... Tail, class Elem = typename std::decay&lt;T&gt;::type&gt; …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.