2013-11-25 53 views
0

斷言可調用的最佳實踐是什麼與std::function兼容。它告訴可調用是否可以作爲參數傳遞,其中需要相對的std::function類型。斷言與std :: function兼容的函數指針

例子:

int foo(int a) { return a; } 
auto bar = [](int a)->int { return a; } 
char baz(char a) { return a; } 

compatible(foo, std::function<int(int)>) == true 
compatible(bar, std::function<int(int)>) == true 
compatible(baz, std::function<int(int)>) == true 
+0

目前還不清楚到底是什麼,你都在問,可能是一個接受這個可調用函數的函數的簽名將有助於(?)平凡,這應該是可能的'std :: is_function <> '和'std :: is_same <>'.. – Nim

+0

第一個和第三個例子的左邊參數是類型,第二個參數是值。這是沒有意義的。 –

+2

否則,'is_constructible'應該是一個使這種檢查工作的特徵。 –

回答

1

爲您更新的問題,也許下面將工作:

#include <functional> 
#include <type_traits> 

template <typename T, typename F> 
constexpr bool compatible(F const & f) 
{ 
    return std::is_constructible<std::function<T>, F>::value; 
} 

用法:

std::cout << compatible<int(int)>(foo) << std::endl; 
std::cout << compatible<int(int)>(bar) << std::endl; 
std::cout << compatible<int(int)>(baz) << std::endl; 
+0

[Live example](http://ideone.com/F8AVK9) –

相關問題