2016-11-18 4 views
1

このコードを考える:C++ 11バウンドメソッドシグネチャの簡素化

#include <iostream> 
#include <functional> 

template<typename T> 
void f(T t1, T t2) { std::cout << t1 << " " << t2 << std::endl; } 

template<typename...Ts> 
void g(Ts... ts) { f(ts...); } 

int main() { 
    auto f = std::bind(g<int, int>, 1, 2); 
    f(); 
    return 0; 
} 

std::bind(g<int, int>, 1, 2)g用テンプレートの種類の指定をスキップする方法はありますか?

そうでない場合は、少なくとも1回タイプを指定することは可能ですか?すなわちstd::bind(g<int>, 1, 2)

ここではlive versionです。

+0

それはそれほど変わりませんが、あなたが使用することができます'std :: bind(static_cast (g)、1,2);'。実際にテンプレートの種類の指定はなくなりました。 :-) – skypjack

答えて

3

私はそれがバインドで可能かどうか分からないんが、あなたは、ラムダと同じ機能を取得し、明示的なテンプレートのparamsは不要:

auto f = []{ 
    g(1, 2); 
}; 
+0

もちろん。私は縛られる権利を主張していましたが、特に必要はありません。ラムダは素晴らしい作品です。ありがとう! – eldruin