問題タブ [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.
c++ - C ++テンプレート:部分的なテンプレート仕様とフレンドクラス
どういうわけか部分的なテンプレート仕様をフレンドクラスにすることは可能ですか?つまり、次のテンプレートクラスがあると考えてください
これで、たとえばポインタの部分的な特殊化ができました
私が達成したいのは、可能な限りすべてのX<T*>
人の友達クラスであるということです。つまり、の友達である必要があります。X<S>
S
X<A*>
X<B>
もちろん、私はXでの通常のテンプレートフレンド宣言について考えました。
ただし、これはコンパイルされません。g++は次のように通知します。
test4.cpp:34:15:エラー:' template<class T> class X
'の特殊化は名前空間スコープに表示される必要があります
test4.cpp:34:21:エラー:部分的な特殊化' X<S*>
'宣言された'友達'
これはまったく不可能ですか、それとも回避策がありますか?
私が尋ねている理由はX<T*>
、任意のクラスからこのクラスを作成するコンストラクターが必要だからですX<S>
(S
のサブタイプでなければなりませんT
)。
コードは次のようになります。
さて、コンパイラーはもちろん、x.t
それがプライベートであるため、コンストラクターでは見えないという不満を言います。これが、部分的な専門の友達クラスが必要な理由です。
c++ - 部分的なテンプレートの特殊化の何が問題になっていますか?
1つの型パラメンターと1つのブール値を持つテンプレートクラスを作成しています。コードは次のとおりです。
そして、私はこれらのコンパイルエラーを受け取ります:
私は何が間違っているのですか?それとも、何らかの理由で非型パラメータを部分的に特殊化することは禁じられていますか?
同時に、ifステートメントでbooleanパラメーターを使用すると、次の警告が表示されます。
だから私はこの種のことに特化することになっています...
どんな助けでも大歓迎です!:)
前もって感謝します!!!!
c++ - How to do a partial template specialization on a nested type?
I have a templated class Converter
, and I'd like to do a partial specialization. The tricky part is I'd like to specialize it to MyFoo::Vec
where MyFoo
again can be specialized as a template parameter. If that sounds confusing, maybe the code itself makes it clearer:
This is just a mini example derived from my actual code. This question is not about how useful such a converter is; I'm just interested in getting the syntax right given that I need such a converter and its specialization.
c++ - SunStudio12でのテンプレートコンパイルエラー
Sun Studio 12.1に移行し、新しいコンパイラ[CC:Sun C ++ 5.10SunOS_sparc2009/06/03]を使用します。以前のバージョンのSunCompiler[CC:Sun WorkShop 6 update 2 C ++ 5.3 2001/05/15]で正常にコンパイルされたコードをコンパイルしているときに、コンパイルエラーが発生します。
これは私が得るコンパイルエラーです。
"Sample.cc":エラー:main()に必要なLoopThrough(int [2])に一致するものが見つかりませんでした。1エラーが検出されました。***エラーコード1。
コード:
Genericバージョンでコードのコメントを外すと、コードは正常にコンパイルされ、Genericバージョンが呼び出されます。拡張機能が無効になっているMSVC2010でこの問題が発生することはなく、ideoneでも同じ問題が発生します。関数の特殊バージョンが呼び出されます。問題は、これはSunCompilerのバグですか?
はいの場合、どのようにしてバグレポートを提出できますか?
c++ - std::enable_if によるあいまいな部分的特殊化
以下のような条件で問題が発生しました。
それで
g++-4.5、g++-4.6、g++-4.7、clang++-3.1 (すべてオプション -std=c++0x を使用) であいまいなクラス テンプレートのインスタンス化が報告されます。
しかし、3番目のケースのチェックを次のように置き換えると
その後、clang++-3.1 は正常に動作します。
コンパイラのバグですか、それとも標準ですか?
c++ - テンプレートの部分的な特殊化により、派生クラスからの初期化が防止されます
部分的に特殊化されたテンプレートから継承し、派生した ctor からテンプレート ctor を呼び出すことができません。
以下のコードの部分的な特殊化をコメント アウトすると、エラーや警告なしでコンパイルされます。
特殊化のコメントを外すと、次のエラーが発生します。
$g++ trouble.cc
supertypesIterator
ctor内から基本クラスを初期化できるようにするには、どうすればよいですか?
私は g++ version を使用して4.7.1
いますが、これもクロスプラットフォームで動作する必要があります。
c++ - テンプレート クラスのメンバー関数の特殊化 - Linux で g++-4.7 を使用
このスレッド -テンプレート クラス メンバー関数のみの特殊化 から、クラス テンプレートを特殊化する場合は、すべてのメンバー関数を特殊化する必要があることを知っています。
したがって、私の理論的根拠は、テンプレート クラスを「インスタンス化」することでした。(正しい言い方かどうかは定かではありません)
次に、このインスタンス化されたクラスは本格的なクラスであるため、特定のメソッドを特殊化できます。
上記のコードは Windows 環境で動作しました。(ビジュアルスタジオ 2008)
しかし、この特殊化は (g++-4.7 を使用すると) Linux では機能しません。他のいくつかのスレッドを読むことで、g++ コンパイル コマンドに -std=c++11 も渡しています。
次の2つのエラーが発生します-
さて、エラーNo. template<>
beforeを追加すると 1 が消えてしまいinline bool A_0::dummy(void *value)
ます。専門化が思い通りに進まなかったことがわかっているので、さらに心配になります。
エラーNo. 2 消えません。
テンプレートクラスメンバー関数の特殊化についてますます混乱しています。ここで何が欠けていますか?g++ が不平を言っている理由はありますか? 何か案は?
ありがとう!
c++ - メンバー関数へのポインターが NULL の場合のメソッドの部分的な特殊化
私は2つのパラメータと派手なpush_backメソッドを持つテンプレートクラスを持っています:
それは使用しています
このコードはコンパイルされません ( エラー C2440: 'static_cast' : cannot convert from 'void (__thiscall pal::InterfaceFunction::* const )(void)' to 'void *' 1> この変換が行われるコンテキストはありません可能です)。
実行時に (!!doWhenPushingBack) チェックを実行すると問題なく動作しますが、少しばかげているように見えます。コンパイル時に入力をチェックする必要があります。
手伝ってくれる?ありがとう。
c++ - テンプレートエイリアスを部分的な特殊化に使用できますか?
テンプレート エイリアスが与えられた場合
の部分的な専門化
なので
gcc 4.7 では警告は生成template parameter can not be deduced
されませんが、clang 3.1 では警告が生成されます
それで、それは不正なコードですか?
c++ - テンプレート クラスの C++ 非特化メンバー
テンプレートクラスについて質問があります。たとえば、このクラスを受講してください
ここで、dllexport を使用して CPP ファイルで特殊化されていないメソッドを定義し、特殊化をヘッダーに保持できるようにしたいと考えています。通常、メンバー メソッドをテンプレートとして定義するだけでよいと思いますが、TBase から継承しているため、それは不可能です。
では、どうすればこれを分割できますか?TBase からおそらく 4 つのメソッドのみをオーバーライドし、他の 40 ほどのメソッドを DLL の DLLEXPORT として保持できるようにしたいと考えていますが、特殊化はヘッダー ファイルにあります。
ご提案いただきありがとうございます。