2017-01-26 5 views
0

validateImplementationというカスタムrxcpp演算子を作成しました。これは一般的な観測可能なストリームを取得し、SimpleInterfaceでいくつかのバリデーションを行い、特定の条件rxcppカスタム演算子でジェネリックを正しく推測する方法

https://github.com/cipriancaba/rxcpp-examples/blob/master/src/SimpleOperators.cpp

template <class T> function<observable<T>(observable<T>)> SimpleOperators::validateImplementation(SimpleInterface component) { 
    return [&](observable<T> $str) { 
    return $str | 
      filter([&](const T item) { 
      if (component.whatsMyId() == "1") { 
       return true; 
      } else { 
       return false; 
      } 
      } 
      ); 
    }; 
} 

しかし、(私の場合には条件がwhatsMyIdです)main.cppvalidateImplementationメソッドを使用しようとすると、私は次のエラーを取得:

no matching member function for call to 'validateImplementation'

note: candidate template ignored: couldn't infer template argument 'T'

あなたは私が私が間違ってやっているのか理解に役立つことはできますか?

+0

[mcve]をあなたの質問自体に(編集で)投稿してください。 –

答えて

1

C++タイプでは、関数を使用する前に完全に解決する必要があります。さらに、テンプレートパラメータは、戻り値の型ではなく、パラメータからのみ推論することができます。最後に、テンプレート・パラメーターを持つ関数の定義は、(ヘッダー内で)呼び出されるか、サポートされているすべてのタイプ(cpp内)に対して明示的にインスタンス化されているときに表示される必要があります。

この場合、私は明示的なインスタンス化を避けます。つまり、2つのオプションがあります。それは推測できないので

は、タイプを明示するためにヘッダ変更main.cppにするCPPからテンプレートパラメータを

function<observable<string>(observable<string>)> validateImplementation(SimpleInterface component); 

移動定義を削除します。

o->validateImplementation<string>(s1) | 
関連する問題