問題タブ [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 に答える
2577 参照

c++ - C ++テンプレート:部分的なテンプレート仕様とフレンドクラス

どういうわけか部分的なテンプレート仕様をフレンドクラスにすることは可能ですか?つまり、次のテンプレートクラスがあると考えてください

これで、たとえばポインタの部分的な特殊化ができました

私が達成したいのは、可能な限りすべてのX<T*>人の友達クラスであるということです。つまり、の友達である必要があります。X<S>SX<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それがプライベートであるため、コンストラクターでは見えないという不満を言います。これが、部分的な専門の友達クラスが必要な理由です。

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

c++ - 部分的なテンプレートの特殊化の何が問題になっていますか?

1つの型パラメンターと1つのブール値を持つテンプレートクラスを作成しています。コードは次のとおりです。

そして、私はこれらのコンパイルエラーを受け取ります:

私は何が間違っているのですか?それとも、何らかの理由で非型パラメータを部分的に特殊化することは禁じられていますか?

同時に、ifステートメントでbooleanパラメーターを使用すると、次の警告が表示されます。

だから私はこの種のことに特化することになっています...

どんな助けでも大歓迎です!:)

前もって感謝します!!!!

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

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.

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

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のバグですか?

はいの場合、どのようにしてバグレポートを提出できますか?

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

c++ - std::enable_if によるあいまいな部分的特殊化

以下のような条件で問題が発生しました。

それで

g++-4.5、g++-4.6、g++-4.7、clang++-3.1 (すべてオプション -std=c++0x を使用) であいまいなクラス テンプレートのインスタンス化が報告されます。

しかし、3番目のケースのチェックを次のように置き換えると

その後、clang++-3.1 は正常に動作します。

コンパイラのバグですか、それとも標準ですか?

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

c++ - テンプレートの部分的な特殊化により、派生クラスからの初期化が防止されます

部分的に特殊化されたテンプレートから継承し、派生した ctor からテンプレート ctor を呼び出すことができません。

以下のコードの部分的な特殊化をコメント アウトすると、エラーや警告なしでコンパイルされます。

特殊化のコメントを外すと、次のエラーが発生します。

$g++ trouble.cc

supertypesIteratorctor内から基本クラスを初期化できるようにするには、どうすればよいですか?

私は g++ version を使用して4.7.1いますが、これもクロスプラットフォームで動作する必要があります。

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

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++ が不平を言っている理由はありますか? 何か案は?

ありがとう!

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

c++ - メンバー関数へのポインターが NULL の場合のメソッドの部分的な特殊化

私は2つのパラメータと派手なpush_backメソッドを持つテンプレートクラスを持っています:

それは使用しています

このコードはコンパイルされません ( エラー C2440: 'static_cast' : cannot convert from 'void (__thiscall pal::InterfaceFunction::* const )(void)' to 'void *' 1> この変換が行われるコンテキストはありません可能です)。

実行時に (!!doWhenPushingBack) チェックを実行すると問題なく動作しますが、少しばかげているように見えます。コンパイル時に入力をチェックする必要があります。

手伝ってくれる?ありがとう。

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

c++ - テンプレートエイリアスを部分的な特殊化に使用できますか?

テンプレート エイリアスが与えられた場合

の部分的な専門化

なので

gcc 4.7 では警告は生成template parameter can not be deducedされませんが、clang 3.1 では警告が生成されます

それで、それは不正なコードですか?

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

c++ - テンプレート クラスの C++ 非特化メンバー

テンプレートクラスについて質問があります。たとえば、このクラスを受講してください

ここで、dllexport を使用して CPP ファイルで特殊化されていないメソッドを定義し、特殊化をヘッダーに保持できるようにしたいと考えています。通常、メンバー メソッドをテンプレートとして定義するだけでよいと思いますが、TBase から継承しているため、それは不可能です。

では、どうすればこれを分割できますか?TBase からおそらく 4 つのメソッドのみをオーバーライドし、他の 40 ほどのメソッドを DLL の DLLEXPORT として保持できるようにしたいと考えていますが、特殊化はヘッダー ファイルにあります。

ご提案いただきありがとうございます。