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

c++ - 列挙型と一致するテンプレート関数の C++ の説明のつかないバリエーション

テンプレート関数を含む次のコードがあります。2 番目のパラメーターが列挙型であるこの関数を呼び出すと、テンプレートの特殊化が検出される場合と検出されない場合があります。

両方の場合で列挙型が同じ列挙型であること (たとえば、再定義がないこと) と、他のパラメーターが正しい値であることを確認しました。1 つのコンパイルが -Winline セットで行われることがわかりました (まだ変更しようとはしませんでした)。見る?

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

c++ - テンプレートクラスの一部のメンバーのみを特殊化するにはどうすればよいですか?

コード:

エラー:

基本的には、1つの関数だけを特殊化し、他の関数には共通の定義を使用したいと思います。(実際のコードでは、専門にしたくない関数がたくさんあります)。

これを行う方法?ありがとう!

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

c++ - C++ - Behavior of function template specialization with rvalue reference

I'm trying to implement a conditional pointer dereferencing function. The basic idea is as follows:

#xA;

In order to limit the number of necessary specialization, I'm attempting to use rvalue references for the case where arg is not a pointer. Here is my current implementation (the std::cout are there solely for debugging purpose):

#xA;

Now, I get a rather strange behavior under GCC 4.6. The first overload is used for both the non-pointer types and the pointer types. Obviously, when using a pointer type, it conflicts with the second overload. If I comment out the second one and call the following using the first one...

#xA;

... the corresponding console output is:

#xA;

How is it possible that a non-pointer type (according to std::is_pointer) is also a pointer type (according to typeid) in the same context? The conflict arises between both overloads due to std::is_pointer wrongly reporting p as a non-pointer type. Also, when I replace the r-value reference with a standard reference in the first overload:

#xA;

It doesn't conflict with the second overload anymore... I simply don't get what's going on. By the way, using the second overload yields (as would be expected):

#xA;

Thanks for your help.

0 投票する
6 に答える
32371 参照

c++ - テンプレートクラス内のテンプレート関数のC++スペシャライゼーション

テンプレートクラス内にあるテンプレート関数を特殊化するためのC++構文は何ですか?たとえば、次の2つのクラスとその使用法があるとします。さまざまなタイプのメソッドX::getAThing()の特殊な実装を提供できるようにしたいと思います。例:int、std :: string、任意のポインタまたはクラスなど。

私は少なくとも1時間、特殊化の正しい構文を推測しようとしてきましたが、コンパイルされるものを見つけることができません。どんな助けでも大歓迎です!

0 投票する
5 に答える
7309 参照

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

以下のコードスニペットでは、

float以外のタイプを渡すと「all」が出力され、floatを渡すと「float」と出力されるテンプレートを変更したいと思います。テンプレートの特殊化は必要ありません。代わりに、入力タイプに基づいてそれに応じて動作する部分的な特殊化があります。どうすればいいですか。前もって感謝します。

さて、私が現在直面しているシナリオは、次のように定義する必要があります。

次の呼び出しは「t2」を出力する必要があります

次の呼び出しは「t1」を出力する必要があります

上記のようなある種のグループ化では、部分的な特殊化の実装を呼び出す必要があり、デフォルトの実装を呼び出す必要があります。

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

c++ - decltype in class template specialization

I am trying to use decltype inside a template class as follows:

That works fine, but now I'd like to add an explicit specialization:

This time g++ gives an error:

What am I doing wrong? I am using gcc 4.5.

EDIT: If I move the declaration of void f(); to above the typedef, as suggested by Johannes, I get (slightly) different errors:

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

c++ - C++ テンプレート オブジェクトへのポインタの使用

クラス テンプレートを持つ ABC という名前のクラスがあります。

別のクラスでは、オブジェクト ABC をリストに格納しようとしています:

異なるクラス テンプレート パラメータを持つ可能性のある ABC のオブジェクトを格納するつもりです。コンパイル時にポインタに対してもテンプレートを指定する必要がありますか? コンテナが異なるタイプのオブジェクトを格納することになっている場合はどうなりますか? それは不可能ですか?

0 投票する
4 に答える
28217 参照

c++ - 関数テンプレートを部分的に特殊化できないのはなぜですか?

言語仕様が関数テンプレートの部分的な特殊化を禁止していることを私は知っています。

なぜそれが禁止されているのか、その理由を知りたいのですが?それらは役に立ちませんか?

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

c++ - 関数テンプレートの特殊化コンパイル エラー

私が得るエラーは次のとおりです: error LNK2005: "void __cdecl func(int)" (??$func@H@@YAXH@Z) already defined in A.obj, one or more complex defined symbols found

関数テンプレートの特殊化は、通常の関数テンプレートとして扱われませんか? A の目的のファイルにあるようです。

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

c++ - C++ テンプレートの特殊化 - リンカー エラーの複数の定義

今日ここで 3 番目の質問 ;-) ですが、私は c++ テンプレート プログラミングと演算子のオーバーロードに本当に慣れていません。

私は次のことを試みています:

ターミナルログ.hh

このコードをコンパイルしようとすると、リンカー エラーが発生します。

そのため、私は現在、頭を壁にぶつけて解決策を探しています。しかし、壁の中にそれが見つからない...

誰かが私の間違いを見せてくれたら素晴らしいだろう

どうもありがとう

フィアロンセム