У меня есть два вопроса относительно функций в C ++: можете ли вы динамически объявить функцию при передаче ее в качестве ссылки, и возможно ли сохранить функции для последующего использования?
Передача динамической функции?
Мой вопрос может быть сформулирован не совсем ясно, но я имею в виду, что на Java вы часто видите код, похожий на:
button.addActionListener( new ActionListener( )
{
public void actionPerformed( ActionEvent e )
{
System.out.println( "..." );
}
} );
или JavaScript:
$( ".class" ).each( function( )
{
alert( "..." );
} );
В то время как в C ++ вы ограничены:
void print( )
{
std::cout << "..." << std::endl;
}
void func( void ( &f )( ) )
{
f( );
}
// ...
func( print );
и не можете делать что-то вроде
void func( void ( &f )( ) )
{
f( );
}
// ...
func( void f( ){ ... } );
Это ограничение C ++?
Хранение функций?
Можно ли вообще хранить подобные функции в контейнере, который будет вызван позже?Пример идеи (которая не работает):
std::vector< void( ) > storage;
void callMeLater( void ( &f )( ) )
{
storage.push_back( f );
}
void popFunction( )
{
void f( ) = storage.pop_back( );
f( );
}
Эти идеи пришли ко мне при работе над системой событий, чтобы посмотреть, может ли мой объект Timer также обрабатывать отложенные функции, а также событиязвонки.Поскольку я никогда не видел, чтобы они использовались в каком-либо коде C ++, я сомневаюсь, что они возможны, но хотел бы, чтобы их показывали иначе!
Спасибо.