申し訳ありませんが、これはよくある質問のように聞こえます。私が見た限り、私の問題に対する答えが見つかりませんでした。最も近い投稿は次のとおりです:基本 POD のみのテンプレートの特殊化
classtemplate <class T> class A {...};
があり、 operator+ を内部二項演算子 (型 A の 2 つのオブジェクト) として、および混合二項演算子 (型 A と数値 POD 型のオブジェクト) としてオーバーロードしたいとします。
理想的には、私が書きたいのは次のとおりです。
#include <type_traits>
using namespace std;
// Declare/fine template
template <class T> class A {...};
// Internal binary operator
template < class T, class U >
A< typename common_type<T,U>::type >
operator+ ( const A<T> &a, const A<U> &a ) { ... }
// Mixed binary operator
template < class T, class U >
A< typename common_type<T,U>::type >
operator+ ( const A<T> &a, const U &b ) { ... }
しかし、2 番目の定義は最初の定義と矛盾しているようです。2 番目の定義を使用して、U が数値 POD 型であることを確認する方法を知っていますが、それは重要ではありません。そのようにすると、問題は、それが A である場合に、U で囲まれている基になるテンプレートの型を知る方法がないことです。
私の質問が十分に明確でない場合は教えてください。事前に感謝します! :)
編集:テンプレートの仕様は、最後の文「U if it is some A<T>
」で、HTML フィルターによって消去されました。要するに、T が隠されているということです。