2016-04-05 24 views
0

コンパイラは関数ポインタのテンプレート引数を差し引くことに失敗しています。関数ポインタのテンプレート引数の控除に失敗しました

template< class Function > 
class foobar { 
    Function f; 
public: 
    foobar(Function _f) : f(_f) {} 

}; 

関数定義は、私は次の行

foobar f(foo); 

コンパイラエラー現在

error: missing template arguments before ‘f’ 
+3

テンプレート引数の減算は、クラステンプレートではなく関数テンプレートに適用されます。 –

+0

@KerrekSB、テンプレート化されたコンストラクタの提案がありました。 – SergeyA

+0

@ SergeyA:[P0091](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0091r1.html)。しかし、それは助けにはならないまたはOPに適用されません。 –

答えて

2

にトラブルを取得してい

bool foo(string a, string b) { 
    // SOMETHING 
} 

で、方法はありませんオブジェクトbの型を推定するyテンプレートコンストラクタ。ただし、メーカ関数は以下を手助けすることができます。

template<class T> 
foobar<T> make_foobar(const T& t) { 
    return Foobar<T>(t); 
} 

... 
auto f = make_foobar(foo); 
関連する問題