9
我傳遞函數指針到一個函數模板:的std :: is_function不承認模板參數的函數
int f(int a) { return a+1; }
template<typename F>
void use(F f) {
static_assert(std::is_function<F>::value, "Function required");
}
int main() {
use(&f); // Plain f does not work either.
}
但模板參數F
不被認可is_function
是一個函數,靜態斷言失敗。編譯器錯誤消息說F
是int(*)(int)
這是一個指向函數的指針。爲什麼它的行爲如此?在這種情況下,如何識別功能或指針功能?
我厭惡的隱式轉換:( – 2013-05-06 09:33:47
*「(諷刺的是,'的std :: is_function <性病::功能> ==假';-))「* - 也許對未來的標準來說'std :: is_callable'可能是一個好主意,因爲'std :: is_function'甚至不適用於lambdas,只是簡單的函數(每個可調用的時間是一個函數在現代C++中結束了)。 –
2013-05-06 11:30:06
@ChristianRau'std :: is_function'是主要的分類特徵之一。 'is_callable'或類似的東西完全可以完全不同。 – 2013-05-06 16:08:30