問題タブ [template-function]

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 投票する
3 に答える
2936 参照

c++ - C++ 11 が暗黙的にラムダを std::function オブジェクトに変換しないのはなぜですか?

コードがコールバックを登録し、引数付きのイベントを発行できるようにする汎用イベント エミッター クラスを実装しました。Boost.Any 型消去を使用してコールバックを保存し、任意のパラメーター シグネチャを保持できるようにしました。

それはすべて機能しますが、何らかの理由で、渡されるラムダを最初にstd::functionオブジェクトに変換する必要があります。ラムダが関数型であるとコンパイラが推測しないのはなぜですか? 可変個引数テンプレートの使用方法が原因ですか?

Clang (バージョン文字列: Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)) を使用します。

コード:

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

c# - C# のテンプレート関数と型

こんにちは、関連する型のために、クラスの設定に問題があります。アイデアは次のとおりです。

クラスAには、クラスBのインスタンスで埋められるはずのプライベート配列リストがあります。したがって、クラスAのインスタンスには、クラスB要素のオンArrayListがあります。クラス A には、その ArrayList に B の新しいインスタンスを追加する関数があります。具体的には、A.Add 内で、新しい B がインスタンス化され、初期化されてから、ArrayList に追加されます。クラス B は非常に単純なクラスです。1 つの列挙型 Type が含まれており、外部オブジェクト/クラスなどへの参照も含まれている必要があります。* appleClass、peachClass、lemonClass * というクラスがあり、classB がフルーツクラス、クラス A がフルーツバスケットであるとします。メインコードが果物を見るたびに、クラス A にそれをバスケットに追加するように要求する必要があります。つまり、 A.add( thisfruit) ですが、この果物は果物クラスのいずれかである可能性があります。つまり、classB をインスタンス化し、それを A.arraylist に追加するには、ジェネリック シグネチャが必要です。意味があるかどうかはわかりませんが、問題を説明するコードをいくつか提供しようとします。

テンプレートをどのように使用すればよいですか?? 上記のコードが間違っていることはわかっていますが、これをどのように行うのが最善かわかりません。

ありがとうございました

アレックス

EDIT ご回答いただきありがとうございます。それらはすべて基本/抽象クラス Fruit の使用を指しているようで、そこから特定の果物を派生させます。申し訳ありませんが、私の実際のプロジェクトには果物が含まれていません。簡単にするために果物を使用しただけです。実際のプロジェクトはUnityにあり、「果物」のいくつかは Unity クラスから来ています。他のいくつかの「果物」は私自身のクラスです。これは、Unity の名前空間に由来するクラスの親クラスを宣言できないことを意味します。私は、古き良き C の void ポインターである "fruit" への一般的な参照を持つことができることをもっと望んでいました。 「不明な」オブジェクトへの参照をクラス/関数に渡し、後でそれを使用/解決する方法...

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

c++ - テンプレート構造体とテンプレート メンバー関数の名前の競合

以下では、GCC はテンプレート構造体をclass のnameテンプレート メンバー関数と混同しますが、Clang は正常にコンパイルされます ( live example )。nameA

この例では、関数fは明らかに type の引数で呼び出されることを意図していますが、それ以外のものである可能性があるため、テンプレート関数のままにする必要があります。Af

どのコンパイラが正しいかはあまり気にしません。回避策が必要なだけです。

usingメンバー関数を呼び出すには、宣言やその他の明確化の方法がどのように適用されるかわかりません。

編集はい、より明示的な構文を試しました

これは機能しますが、本当に醜いです。簡単な構文を機能させる方法はありますか? それ以外の場合は、最初に 2 つの名前のいずれかを変更することをお勧めします...

EDIT2私の元のバージョンは、最も醜いものを必要とfするユニバーサルリファレンスで動作しますT&&

場合Tは参照です...そして、これはすべて単純な関数呼び出しです。

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

c++ - ベクトルを使用した C++ テンプレート関数

次のコード行とコンパイル エラーがあります。テンプレート関数、C++ジェネリック、またはその他の何かについての私の間違った理解のはずです。ご指摘ありがとうございます。

コンソールのコンパイル エラー

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

c++ - テンプレート: クラスにメソッドがある場合にのみメソッドを実行する

テンプレート化されたクラスのメソッドを実行する関数を書きたいのですが、クラスにない場合でも正常にコンパイルする必要があります。その場合、関数を呼び出さないでください。

これはどういうわけか可能ですか?

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

c++ - 異なるデータ型を返す C++ 関数

まず、この質問のタイトルがあいまいな場合はお詫び申し上げます。

つまり、関数内の条件に基づいて、多数のデータ型 (すべて私が定義したもの) のいずれかを返す関数を作成しようとしています。本質的に、私がやろうとしていることはこれです:

もちろん、この例は少しわざとらしいですが、私の言いたいことは通じると思います。

クラス A、B、および C はすべて、他のクラス S の子クラスですが、S を返すとデータが失われるため、S を返したくありません。さらに、戻り値の型がオーバーロードされても機能は実際には変わりません。それでは、これはテンプレート関数である必要がありますか、それとも他に何かする必要がありますか?

ありがとう、

0 投票する
0 に答える
44 参照

c++ - 関数テンプレートのデフォルトのテンプレート引数について

C++11 では、テンプレート関数のテンプレート引数にデフォルトを設定できることを理解しました。これまでは、クラスのみに許可されていました。

C++11 のテンプレート引数にデフォルトを入れると、以下のような意味になるといつも思っていました。

代わりに、従来のC++が機能すると信じて、次のことを試みました

以下のサンプルコードで発生したエラーは次のとおりです

コンパイラはテンプレート引数の 1 つにデフォルトを設定しようとしていますか (構文は少し異なります)、それとも何か間違っていますか?