對不起,如果這之前已被問過,但我無法找到它。通過值(?)傳遞函數而不是函數指針?
所以即時嘗試教育自己關於模板和新的C++ 11功能(主要是lambda,我總是喜歡用其他語言)。
但在我的測試中,我來到事我不知道它的工作,和我想要了解它是如何工作的,但不能圖出來..
下面的代碼:
template <class Func>
void Test(Func callback) {
callback(3);
}
void Callback(int i) {
std::cout << i << std::endl;
}
int main(int argc, char** argv) {
Test(&Callback); // this I was expecting to work, compiler will see its a pointer to a function
Test(Callback); // this also works, but how?!
return 0;
}
如果我理解模板是如何工作的,那麼基本上它們是編譯器知道要構建什麼的方案,所以我期待着第一次調用Test(&Callback);
,因爲編譯器會看到模板接收到函數地址並將假設參數應該成爲一個指針。
但是第二個電話是什麼?假設它是什麼模板?功能的副本(如果這甚至有意義)?
感謝您的回答。所以如果我沒有使用模板和聲明測試如:無效測試(無效(*回調)(INT)){...}這兩個調用也將工作。這是很好的知道。虐待確定我讀了你鏈接的線程。 – sap