Как бы реализовать замыкания?
От: remark Россия http://www.1024cores.net/
Дата: 17.07.09 09:52
Оценка:
Первоначально предполагалось реализовать замыкания как:

template<typename T>
struct param_traits
{
  // определяет как передавать и хранить аргумент
};

template<typename T>
struct param_traits<T const&>
{
  //...
};

template<typename T>
struct param_traits<T&>
{
  //...
};

template<typename A1, typename A2>
void spawn (void(*f)(A1, A2), typename param_traits<A1>::param_type a1, typename param_traits<A2>::param_type a2)
{
  // запоминаем f, a1, a2 для последующего исполнения
}
// аналогичные функции spawn() для другого кол-ва аргументов


Важные преимущества:
— неправильные типы аргументов детектируются в месте вызова spawn
— автоматически определяется наиболее адекватный способ как хранить аргумент, т.е. не надо ref/cref как в boost
— отсутствует лишняя работа во время выполнения
— всего 1 шаблон spawn() для 2 аргументов

Теперь надо добавить различные хинты к аргументам, что-то типа такого:
X* x = new X (...);
spawn(foo, delete_after_execution(x));


или:
spawn(foo, pass_by_pointer(x)); // перекрываем способ передачи по-умолчанию



Не понимаю, как это сделать без потери указанных преимуществ.
Есть какие-нибудь идеи?



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.