問題タブ [partial-specialization]

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 に答える
492 参照

c++ - テンプレートの部分的な特殊化の問題

数学プログラミング用のサイズと型のジェネリック ベクトル クラスを作成しようとしています。部分的な特殊化に問題があります。

この問題は、ベクター クラスのメンバ メソッドを特定のサイズに特化しようとすると発生します。

簡単な例を挙げることができます:

この単純な例をコンパイルしようとすると、「クロス」特殊化が既存の宣言と一致しないというコンパイル エラーが発生します。

テンプレートとして cross を宣言しようとしました:

このバージョンはコンパイルに合格しますが、リンク時に失敗します:

ここで何が欠けていますか? ありがとう、フロラン

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

c++ - テンプレートの特殊化と昔ながらの関数

簡単な質問があります。このコードを確認してください。

もちろん、g++ 4.7.2 でコンパイルすると動作しますが、出力が「3」ではなく「2」である理由がわかりません。

私が覚えている限り、テンプレート以外の関数は常にテンプレート関数よりも優先されるのに、特殊化された foo と呼ばれるのはなぜですか?

ありがとう

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

c++ - コレクション内の各要素で print を呼び出すための汎用アルゴリズム

次のようなテンプレート関数を記述する場合:

コレクションをループしてイテレータを逆参照するとき、vector<int>に変更しない限り、次のようなものがあればすべて正常に機能しますvector<int*>。コードを複製せずに、単一のテンプレート関数の違いに対処する最善の方法は何ですか?

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

c++ - テンプレート化された関数のオーバーロードを部分的に特殊化されたテンプレート化されたクラスの静的メソッドに変換する方法は?

「文字、符号付き整数、符号なし整数、浮動小数点、ポインター」など、型の品質に基づいて特殊化したい関数がいくつかあります。type_traitsを使用することはこれを行う方法ようであり、次のようなコードがあります。

私の実際のコードを除いて、私は、、なども持ってbarbazますfoo

ただし、品質ごとにこれらすべての関数をメソッドとして1つのテンプレートクラスにグループ化したいと思いstaticます。これはどのように行うのが最善ですか?これが私の素朴で壊れたタグ、SFINAE、および部分的特殊化の使用の試みです。

:実際のコードでは、 static-methodsに加えてbarbazなどがあります。foo

参考までに、これはC++03です。

余談ですが、私は従来の方法でテンプレート関数のオーバーロードを行っていますか?

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

c++ - 指定されたコンテナ型のイテレータ型の部分特殊化

テンプレート引数に Iterator 型を受け入れるテンプレート構造体があります。今度は、そのクラスをさまざまなコンテナーのイテレーター用に特殊化する必要があります。私は std::vector で試しました

しかし、私はこのコンパイラエラー(VS11)を受け取りました: 'T' : template parameter not used or deducible in partial specialization

なぜこれがうまくいかないのか誰か教えてください。そして、それを機能させる方法は?

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

c++ - デフォルトのテンプレート引数は専門化に対応できますか?

こんにちは:)この質問について調べてみましたが、関連する投稿がたくさんあるようですが、これまでのところ、私の問題を解決できる回答はありませんでした。この特定の質問に回答する投稿を知っている場合は、どの投稿か教えてください。この投稿を削除します。

これが私がやろうとしていることです。テンプレート引数が 1 つあるクラスがあり、そのデフォルト値はテンプレートの特殊化に対応しています。これまでのところ (以下のコードを参照)、コンパイルされません。私を悩ませているのは、2 つのテンプレート引数を使用した同様のケースと、部分的なテンプレートの特殊化がコンパイルされ、正常に動作することです.. :/

私は何を間違っていますか?


ケース 1: 2 つのテンプレート引数 (コンパイルして動作)

ヘッダ

cpp


ケース 2: 1 つのテンプレート引数 (コンパイルしない)

ヘッダ

cpp

エラーが表示されます: 'b' の前にテンプレート引数がありません。これを読んでくれてありがとう!:)

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

c++ - 列挙型に一致するクラス テンプレートの部分的なテンプレート特殊化を作成できますか?

次のような構文を提供する一連のクラステンプレートの明示的な特殊化によって強化された関数テンプレートがあります

(どこGetAs<t>に次のようなものがあります:

)

その型が列挙型の場合に特殊化しDesiredTypeて、返される型が列挙型 (または) の基になる型と一致するようにしたいと思いenum classます。

それは可能ですか、それともクライアントは基になる型を自分で指定する必要がありますか?


次のようなコードを許可しようとしています。

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

c++ - 特定の値に対する C++ テンプレートの特殊化

私はOpersいくつかの算術演算を含む構造体を持っています: mult(), div(), mod().

そして、 の特定の値に対してテンプレートを特殊化する必要がありますn。の例を次に示しOpers<1>ます。

nしかし、 2 のべき乗 (n = 2,4,8,16, ...) の特殊化も行いたいと考えています。この場合、操作mult() を最適化できますdiv()(左または右にビット単位のシフトを使用)。

私は次のような建設を探しています

可能ですか、またはどのマニュアルを読む必要がありますか?

アップデート。C++11 の使用は許可されており、さらに優れているでしょう。

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

c++ - 継承されたネストされたクラス テンプレートの部分的な特殊化について

この質問は、gcc のバグ レポート (gcc 4.5.0 で修正されたと思われる) が言及された以前の Q&Aに関連しており、ネストされたクラス テンプレートの部分的な特殊化に関するいくつかの特殊性に関係しています。

私のセットアップは、部分的に特化Baseされたネストされたクラス テンプレートを持つクラスがあることです(クラス内で明示的な仕様が許可されていないため、ダミー パラメーター トリックを使用します)。Innerchar

Derivedここで、さらに特化したいクラスを定義しますがInner、これは何らかの奇妙な理由でクラス内で行うことができません (まだ部分的な特化であるにもかかわらず)。

最初の質問Derived::Inner:名前空間スコープで部分的に特殊化する必要があるのはなぜですか?

しかし、最も奇妙な部分は、 と のInner両方のさまざまな部分特殊化を呼び出すBaseと、に対してのみ行っDerivedた部分特殊化がにも適用されることです。intDerivedBase

2 番目の質問: 部分的にしか特殊化されていないのに、なぜ が にBase::Inner<int>::value等しいのですか?falseDerived::Inner<int>

gcc 4.8.0 を使用したオンラインの例。この動作を説明する標準からの引用を特に探しています。