C ++ compiladores podem embutir um ponteiro de função?
Suponha que eu tenho uma funçãofunctionProxy
que usa um parâmetro genéricofunction
e chame seuoperator()
:
template< typename Function > void functionProxy( Function function ) {
function();
}
O objeto passado para ele pode ser:
um functor:
struct Functor {
void operator()() const {
std::cout << "functor!" << std::endl;
}
};
uma função:
void function( ) {
std::cout << "function!" << std::endl;
}
uma função lambda (C ++ 0x):
[](){ std::cout << "lambda!" << std::endl; }
int main( )
{
functionProxy( Functor() );
functionProxy( function );
functionProxy( [](){ std::cout << "lambda!" << std::endl; } );
return 0;
}
O compilador será capaz de incorporarfunction
dentrofunctionProxy
em todos os casos acima?