問題タブ [function-templates-overloading]
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.
c++ - 派生クラスのオーバーロードされた関数
派生クラスにオーバーロードされた関数をいくつか入れたいのですが、うまくいきません。理由は何ですか?そしてそれを機能させる方法は?
https://godbolt.org/z/hTGjjx43oによる結果の出力:
c++ - テンプレート クラスでのみ double 型の関数テンプレートの特殊化を追加します。
基本クラスを持つクラス テンプレートの実装があります。
cpp [クラス内から移動]:
getErrorPercent、getFotmattedText、および double 型のみの getErrorPercentageStr の関数テンプレートの特殊化を追加したいと考えています。
getErrorPercent の場合:
getFotmattedText の場合:
double の getErrorPercentageStr 関数は、誤差 [m_measured と m_expected は double になります] を計算し、文字列として返します。他のすべてのタイプでは、空の文字列が返されます。
私は解決策を探していましたが、ダブルの正しい関数をコンパイルまたは呼び出すことができません。
関数の特別なバージョンをどこにどのように置くのですか? これらをクラス自体に入れることはできないと思います。
hまたはcppファイルで?
関数の主な実装 [非特殊化] をクラスに残すことはできますか?
特殊な関数のプロトタイプをどこかに配置する必要がありますか?
そして、cppで実装しますか?
これを試してみたところ、MyClass::getFormattedText() および MyClass::getErrorPercent() の int バージョンの「未解決の外部シンボル」が大量に取得されました。bool、unsigned int、および std::basic_string バージョンについても同様です。これらはすべてデフォルト バージョンを使用する必要があります。
これらを修正するにはどうすればよいですか?
「if constexpr (std::is_same_v<T, double>)」で処理するようにしましたが、vxWorks でコンパイルできませんでした。<< for double in getErrorPercentageStr where "rep << difference << "V";".
エラー: 'operator<<' に一致しません (オペランドの型は 'std::ostringstream' と 'double' です)
どんな助けでも大歓迎です!