さらに別のテンプレートの問題です!私は、演算子のオーバーロードがある場合、オブジェクトを出力するテンプレートメソッドを取得しようとしています< <。 私はほとんどすべての作業をしており、g ++がオブジェクトの種類ごとに目的の特殊化を選択するためにenable_ifを実装しました。テンプレートの特殊化はあいまいです
ことは、それはかなりうまく動作し、非オーバーロードされたオブジェクトと、あります。しかし、オーバーロードされたものでは、私の専門分野はどちらもg ++の合理的な選択肢です。コンパイルする代わりにあいまいなオーバーロードエラーが出力されます。そのようなことが曖昧である理由を私は理解し
template<typename T>
static void Print(Stream& out, T& param, typename enable_if<CanPrint<T>::value>::type = 0)
{
out << param;
}
template<typename T>
static void Print(Stream& out, T& param)
{
out << "/!\\" << typeid(param).name() << " does not have any overload for <<.\n";
}
:
は、ここでは、コードです。しかし、私はそれをもっと明白にする方法を考えることはできません...コンパイラは、最初のことができない場合にのみ、2番目のオーバーロードを選択するように理解していますか?
はい、それは実際には事です。私はそれをどのように機能させるのですか? –