問題タブ [function-templates]

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

c++ - クラステンプレートのフレンド関数

クラステンプレートがありFoo<T>ます。

Bar2つのsを取りFoo、を返す非メンバー関数を実装したいと思いますFoo。発信者が書くよりもBar自然になるので、私は非会員になりたいです。計算が簡単で頻繁なので、私もなりたいです。Bar(f1, f2)f1.Bar(f2)Barinline

秘訣は、のプライベートデータBarにアクセスする必要があることです。Fooプライベートデータへのアクセサーを持たない方がいいです。プライベートデータをユーザーに公開する正当な理由はありません。Barだから私はの友達を作りたいですFoo

ここで私は問題にぶつかります。コンパイラは文句を言います:

フレンド宣言が関数テンプレートの特殊化を参照している場合、インライン指定子は使用できません。

このルールは標準によって課されていますか、それともMSVC ++に固有ですか?

これが私が試したことです:

  • const Barpublic member関数を作成してから、単に。を返す​​非メンバーバージョンを宣言しますlhs.Bar(rhs)。これは最もハッキーな解決策のようです。

  • inlineコンパイラがヒントに関係なくインライン化を決定することを知って、ヒントを削除します。次に、これは単一定義規則に違反しますか?関数テンプレートであるため、ヘッダーファイルで定義する必要があります。

  • ダミーのテンプレートタイプを使用してメンバー関数を宣言します。

    /li>

なぜそれが機能するのか完全にはわかりませんが、コンパイラーは満足しています。

より良い解決策はありますか?

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

c++ - 戻り値の型が T の関数テンプレートがコンパイルされない

次のコードは正常にコンパイルされます。

ideone でコンパイル成功: http://ideone.com/dR6iZ

しかし、戻り値の型について言及すると、コンパイルされません。

今ではエラーが発生します:

prog.cpp:6: エラー: 'f(const char [21])' の呼び出しに一致する関数がありません</p>

ideone のコード: http://ideone.com/b9aSb

戻り値の型const Tにしてもコンパイルされません

私の質問は:

  • なぜコンパイルされないのですか?
  • 戻り値の型は、エラーと関数テンプレートのインスタンス化にどのような関係がありますか?
0 投票する
1 に答える
900 参照

c++ - あいまいなエラー: テンプレート C++

考えられるほとんどすべてのことを試しましたが(もちろん正しいことは別として)、あいまいなエラーが発生する理由がまだわかりません。私はそれが本当にばかげたことだとかなり確信していますが、私はそれを見ることができません! 私のコンパイラは挿入演算子で警告を表示し、それらが両方とも呼び出されていることを知っていますが、古いものに固執するvirtualとそこに役立つと言われました(そしてそうではありません...)、とにかくまだ!

呼び出し時のエラーcout << endl << accType;

ProduceReport.cpp:16: error: ambiguous overload for 'operator<<' in 'std::cout. std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>](std::endl [with _CharT = char, _Traits = std::char_traits<char>]) << accType'

エラーメッセージです。

このエラーを回避する方法について、ヘルプやヒントをいただければ幸いです。

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

templates - テンプレート関数の「一致する関数呼び出しがありません」

テンプレート関数を記述しようとすると、次のエラーが発生し続けます。

エラーを検索したところ、パラメーターが float または double の場合に型以外のテンプレート パラメーターが問題になる可能性がある他のケースがいくつか見つかりました。size_t行列とベクトルのサイズを決定するために、タイプのないテンプレート パラメータを使用しています。

私は次のクラスを持っています:

マトリックス:

ベクター:

私の機能:

から呼び出されます:

gcc バージョン 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)

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

d - D関数テンプレートと型推論

次のコードを検討してください。

consume今、私はコンパイラがそれがインスタンス化されることを推測することを期待しています

しかし、それは起こらないようです。エラーは次のとおりです。

パラメータタイプが正しいことがわかります...次のような関数シグネチャのバリエーションをいくつか試しました。

これもコンパイルされません(引数の順序を変更するというアイデアでした)、そして

これは、型をコンパイルして推測します。呼び出しでタイプを明示的に指定した場合、つまり

また、期待どおりにコンパイルされ、デバッグwritelnが出力charされます。推論規則に何かが欠けているのですか、それともコンパイラのバグにぶつかっただけですか?

そうそう:

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

c++ - 関数に特化したC++テンプレート

テンプレートの特殊化で遊んでいますが、解決できないと思われる問題を見つけました。これは私のコードです:

だから私がやろうとしているのは、テンプレートで処理されるものの長さを渡すことです。

問題は、これをコンパイルすると、永久に出力されることです。

最後の2行は、最初の行とほとんど同じです。

私には、専門分野を捉えていないように思われるので、次のようになります。

私は正しいですか?

そして、私が正しければ、部分的なテンプレートの特殊化が関数テンプレートに許可されていないという問題だと思います。それでは、構造体を作成し、それに特殊化を使用することで、どのような解決策がありますか?

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

c++ - C ++のテンプレート関数で通常のパラメーターとテンプレートパラメーターを渡す方法は?

myNamespaceという名前空間に(次のように)テンプレート関数があります。

ただし、この関数を呼び出すと、次のエラーが発生します。

私はすべての組み合わせを試しましたが、運がありません、助けてください!!!

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

c++ - 非型関数テンプレートパラメーター

私はC++Templates Complete Guideを読んでいて、この非型関数テンプレートパラメーターコードに出くわしました(関数定義と呼び出しを除くmain()と他の部分を追加しました):

本を読んだ後、なぜ関数呼び出しの型キャストが必要なのか理解できませんでしたか?

編集:本からの説明:

addは関数テンプレートであり、関数テンプレートは、オーバーロードされた関数のセットに名前を付けると見なされます(セットにメンバーが1つしかない場合でも)。ただし、現在の標準によれば、オーバーロードされた関数のセットをテンプレートパラメータの推定に使用することはできません。したがって、関数テンプレート引数の正確なタイプにキャストする必要があります:...

コンパイラ:Ubuntu10.10のg++ 4.5.1

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

c++ - 関数テンプレートで(ブースト)バインドを使用できますか?

(ブースト)バインドを使用して引数を関数テンプレートにバインドすることは可能ですか?

アイデア?