2016-11-18 16 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模板類型規範?

如果不是,至少可以指定一次類型嗎?即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