関数bar()をサポートするライブラリを提供しています。スカラー値(double、intなど)を渡したときの動作は、スカラー値ではないもの(予想されるすべての場合、ユーザー定義型)を渡した場合の動作とは異なります。だから私はこのようなコードを書きました:
#include <iostream>
class Foo
{
public:
template <class T> void bar(T const &rhs) { std::cout << "T" << std::endl; }
void bar(double rhs) { std::cout << "double" << std::endl; }
};
int main()
{
Foo foo;
foo.bar(4);
}
これに関する問題は、main()の2行目にあります。このコードの結果は「T」の出力です。コンパイラーはbar(double)の呼び出しよりもテンプレートを優先します。これは、パラメーターがintであり、int const&にキャストするためであると想定しています(const&はr値を参照できるため)。
私の質問は、「明示的に呼び出すことなく、すべてのスカラー値をサポートできる方法はありますか?」です。私は本当にすべての可能なタイプを呼びたくありません、なぜなら...まあ...それらはたくさんあるからです。charからlonglongまですべてをカバーし、揮発性とunsignedのすべての組み合わせを含める必要があります。
4を4.0に変更するだけで機能することは知っていますが、これはライブラリへのパブリックインターフェイス用であり、ユーザーが4.0
代わりに入力する必要があるの4
は汚いだけです。