Извините, если об этом спрашивали раньше, но я не смог его найти.
] Итак, я пытаюсь изучить шаблоны и новые возможности C ++ 11 (в основном лямбды, которые мне всегда нравились на других языках).
Но в моих тестах я обнаружил то, о чем я понятия не имел, что это работает, и я Я пытаюсь понять, как это работает, но не могу понять ..
Следующий код:
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;
}
Если я понимаю, как работают шаблоны, в основном это схема, по которой компилятор знает, что строить, поэтому первый call Test (& Callback);
Я ожидал, что сработает, потому что компилятор увидит, что шаблон получает адрес функции, и предположит, что аргументы должны быть указателем.
Но что такое второй вызов? предполагаемый шаблон? Копия функции (если это вообще имеет смысл)?