問題タブ [explicit-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.
c++ - C++: メンバーの特殊化には template<> 構文が必要です
私は次のことを試しています...
Visual Studioで次のことをしようとすると、正常に動作します..しかし、g ++を使用してコンパイルすると、specializing member ‘Singleton<ABC>::ptr’ requires ‘template<>’ syntax
. ここで何が欠けていますか?
c++ - 関数テンプレートの明示的な特殊化で「戻り値の型」の制限を指定する規定はありますか?
この例を考えてみましょう。これはすべての実装によって拒否されます。ただし、現在の標準には、この明示的な特殊化宣言が不適切であると指定する説得力のある条項は見つかりませんでした。存在する場合、そのルールは何ですか?
さらに、潜在的に関連するルールは [temp.deduct.decl#2] である可能性があります。
そのように考慮された関数テンプレートのセットについて、部分的な順序付け ([temp.func.order]) が考慮された後に一致がないか、複数の一致がある場合、演繹は失敗し、宣言の場合、プログラムは病気です。 -形成された。
「一致」は何かを明確に定義していないため、ここでは「一致」の意味が十分に明確ではないと思います。
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' です)
どんな助けでも大歓迎です!