のためのテンプレート引数を推定できませんでした:私はいくつかの他のクラスを持っているは、私は次のシグネチャで例えば<code>function</code>と呼ばれるシンプルな機能持ってオーバーロードされた関数
class Type { /* ... */ };
bool function(const Type& aValue) { /* ... */ return true; }
をし、私はそのように記載されている機能をオーバーロードしたいですBase
から派生クラスのみがそれを使用することができること:
class Base { /* ... */ };
class Derived : public Base { /* ... */ };
template < typename T >
bool function(const typename std::enable_if< std::is_base_of< Base, T >::value, T >::type& aValue) { /* ... */ return true; }
私はこのようにそれを使用する場合
が、私は、私が言及したエラーを取得するテンプレート引数を残す場合(推測できなかったテンプレート引数):
Derived object;
function(object); // Compilation error (C2664).
は、私はテンプレート引数を残すことができます任意の解決策はありますか?
(MSVC 2012)
ここでは推測されないコンテキストのIsnt Tは 'std :: is_base_of < Base, T > :: value'ですか?参考までにここをクリックhttp://stackoverflow.com/questions/25245453/what-is-a-nondeduced-context – marcinj
これはコンパイラの問題ではありません。 Tはこれから推論できないので、コンパイラは成功しません。 –