問題タブ [enable-if]

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.

0 投票する
2 に答える
8356 参照

c++ - テンプレート パラメーターを使用してデータ メンバーを追加/削除しますか?

次のコードを検討してください。

このコードでは、テンプレート パラメーターAddMembersを使用して、クラスに関数を追加できますtrue。そのために、 を使用しstd::enable_ifます。

私の質問は次のとおりです:データメンバー変数に対して同じことが可能ですか(おそらくトリックを使用)? MyClass<false>( 1 つのデータ メンバー ( myVariable) とMyClass<true>2 つのデータ メンバー (myVariableおよび) を持つような方法でaddedVariable?

0 投票する
2 に答える
715 参照

c++ - ジェネリック型に特化した関数グループ

休眠コードはgcc4.7で動作します。アイデアは、シーケンス、ポインター、タプル、ペア、ユーザー定義型などで機能するこれらの総称関数を持っているということです。これらの関数の1つが型に対して定義されている場合、すべてが定義されている必要があります。私が抱えている問題は、それらをどのように専門化するかを決定することです。タイプごとに特化したテンプレートクラスを定義し、各関数を実装してから、クラス内の実装に転送するだけの無料の関数を定義することにしました。

私がやりたいのは、より一般的な型にMonを特化することですが、enable_if継承トリックを再度使用しようとすると、gccはMonがすでに定義されていると文句を言います。この質問で述べたように、2番目のテンプレート引数をSFINAEのtrue_またはfalse_typeにする手法も試しましたが、コンパイルすることができませんでした。

理想的には、アクションを定義したいタイプのカテゴリを考えるときはいつでも、enable_ifを記述して、関数のグループ全体をテンプレートの特殊化に記述できる必要があります。これにより、関数ごとに1つのenable_ifを作成する手間が省けます。悲観的に、私は本当に一般的であるために、各カテゴリーのすべてのもっともらしいタイプのためにグループを専門化する必要があるでしょう。

これを一般的で拡張可能な方法で書くことはできますか?

PS:コンセプトだけがC++11の一部だったとしたら。

0 投票する
1 に答える
461 参照

c++ - boost::enable_if MSVC

で期待どおりにコンパイルして実行し、でコンパイルしgccないコードがあります。MSVC 2012 RC理由を説明できないので、でのバグMSVCですか、それともコードが正しくありませんか?

http://liveworkspace.org/code/45d78872a2c7f30192277a81c655b471

MSVC によると、push_backatは のメンバーではありませんSome<vect_t>

編集。

MSVC 2012 のバグのようです。

にできないエラーが発生するため、特殊化ではなく一般的なケースを選択しますpush_back int...std::vector<boost::mpl::vector<int, double> >

編集。

奇妙な...しかし、これは期待どおりに機能します

そのため、理由を説明することはできませんが、MSVC 2012 は、enable_if (またはおそらくテンプレート パラメーター) でネストされた式を使用できません。

0 投票する
1 に答える
2612 参照

c++ - std::enable_ifまたはイテレータまたはポインタのSFINAE

引数を取るコンストラクターを書きMyClassたいのですが、引数がapointerまたはiterator(何かを持っているiterator_traits)の場合にのみこれをコンパイルしたいと思います。これを達成する方法は?

0 投票する
3 に答える
530 参照

c++ - 現在の型を除く Base から派生したすべての型で利用可能な暗黙のコンストラクター?

次のコードは私の問題を要約しています:

サンプルコードのように明示的なコンストラクターが既にあることを考慮して、テンプレートパラメーターに関係なく、現在のクラスを除いて、親クラスから派生したすべてのクラスに暗黙的なコンストラクターを制限する方法は?

編集: Base からの暗黙のコンストラクターについては、明らかに次のように記述できます。

しかし、その場合、コンパイラがこのコンストラクタを暗黙のコンストラクタとして使用しないという保証はありDerived2<OtherParameter1, OtherParameter2, OtherParameter>ますか?

EDIT2:ここにテストがあります:(ここのLWS: http://liveworkspace.org/code/cd423fb44fb4c97bc3b843732d837abc )

最後の行が気になります。C++標準で大丈夫ですか?g++ のバグですか?

0 投票する
1 に答える
393 参照

c++ - エラーの原因となるコンストラクターのC++型特性

重複の可能性:
「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?

単一の引数を取り、その引数の型::tに他の型のサブタイプでなければならないメンバー型がある場合にのみ有効になるコンストラクターが必要です。私はこれに型特性を使用しており、コードは次のようになります。

ただし、g++は次のように文句を言います。

私は何を間違えましたか?

0 投票する
1 に答える
449 参照

c++ - これらの関数テンプレートのいずれかがインスタンス化と一致しないのはなぜですか?

次のコードは、Intel C++2013でコンパイルできません。

エラー出力は次のとおりです。

どこが間違っているのですか?

0 投票する
1 に答える
270 参照

c++ - 怠惰なenable_ifが仕事で寝ていますか?

以下に示す定義では、G++ (4.7.2) を呼び出しqget<0>()たり使用したりできますが、「より高い」はエラーで失敗します。一方、Clang++ (3.2) は、それらのいずれでも失敗します。私は最後の手段として、怠惰なenable_if を使用しました。私はそれを必要とすべきではないと思いますが。コードが少し奇妙に見えることはわかっていますが、エラーの原因を特定できる人はいますか? (Boost は enable_if クラスを提供します。)qget<1>()qget<2>no matching function

0 投票する
1 に答える
1361 参照

c++ - enable_if を使用したクラス テンプレートのメンバー関数のオーバーロード

重複の可能性:
メンバー関数を条件付きでコンパイルするための std::enable_if

Foo<T>::bar()次のような特定のタイプのメソッドをオーバーロードしようとしてTいます-成功しません。ポインタと回避策をいただければ幸いです。

これをideoneでコンパイルすると、次のコンパイラ エラーが発生します。

0 投票する
1 に答える
205 参照

c++ - std ::enable_if2番目の質問

私はstd::enable_ifにまったく慣れておらず、それをどのように使用するのか疑問に思っています。テンプレートクラスがあります:

テンプレートにメンバーcを持たせたいのは

std :: enable_ifを使用してこれを行うにはどうすればよいですか?これはstd::enable_ifを使用する正しいケースですか?