Przepraszam, jeśli zostało to wcześniej zadane, ale nie mogłem go znaleźć.funkcja pass przez wartość (?) Zamiast wskaźnika funkcji?
Próbuję się uczyć o szablonach i nowych funkcjach C++ 11 (głównie lambdas, coś, co zawsze podobało mi się w innych językach).
Ale w moich testach doszedłem do czegoś, nie miałem pojęcia, że pracował, a ja staram się zrozumieć, jak to działa, ale nie mogę zrozumieć to ..
Poniższy kod:
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;
}
Jeśli rozumiem, jak działają szablony, w zasadzie są one schematem dla kompilatora, który wie, co budować, więc pierwsze wywołanie Test(&Callback);
oczekiwałem pracy, ponieważ kompilator zobaczy szablon otrzyma adres funkcji i przyjmie argumenty być wskaźnikiem.
Ale jaki jest drugi telefon? Jaki jest szablon, zakładając, że tak jest? Kopia functio (jeśli to w ogóle ma sens)?
dzięki za odpowiedź. więc gdybym nie używał szablonów i zadeklarował Test: void Test (void (* callback) (int)) {...} oba połączenia również by działały. dobrze wiedzieć. chory upewnij się, że przeczytałem wątek, który łączyłeś. – sap