Здравствуйте, Снорк, Вы писали:
С>Можно ли в C++ передать в шаблон не только имя типа, но и имя метода?
С>Вот исходник, который по понятным причинам не работает:
С>
Здравствуйте, Снорк, Вы писали:
С>Можно ли в C++ передать в шаблон не только имя типа, но и имя метода?
С>Вот исходник, который по понятным причинам не работает:
С>
С>Что приводило бы к вызову метода Method у экземпляра, указуемого p.
С>Как можно решить эту проблему в общем случае?
В данном случае необходимо реализовать так называемые замыкания (closure), типа как в Builder или Delphi.
Задавать в качестве параметра шаблона имя метода нельзя. Вообще параметром шаблона может быть только константное выражение — имя типа, константа простого типа.
Необходимо использовать указатель на метод класса.
Эту задачу можно решить при помощи обобщённого функтора из шаблонной библиотеки Александреску "Loki". Его функторы позволяют реализовать замыкания (по крайней мере он так пишет в своей книге).
Re[2]: EventHandler
От:
Аноним
Дата:
06.08.03 07:50
Оценка:
Здравствуйте, addword, Вы писали:
A>В данном случае необходимо реализовать так называемые замыкания (closure), типа как в Builder или Delphi. A>Задавать в качестве параметра шаблона имя метода нельзя. Вообще параметром шаблона может быть только константное выражение — имя типа, константа простого типа.
Но ведь к простым типам относятся и указатели на члены.
Здравствуйте, MaximE, Вы писали:
ME>Здравствуйте, addword, Вы писали:
A>>В данном случае необходимо реализовать так называемые замыкания (closure), типа как в Builder или Delphi.
ME>Давно уже все реализовано и включено в слудующий стандарт stl — boost::function<>.
Я же не сказал что это не сделано. Я же привёл в пример библиотеку Loki. Естественно в ей подобных тоже это есть (и про boost я знаю). Я же не могу перечислять все библиотеки Но у меня к Вам вопрос — когда это библиотека boost стала стандартом?
Здравствуйте, addword, Вы писали:
ME>>Давно уже все реализовано и включено в слудующий стандарт stl — boost::function<>.
A>Я же не сказал что это не сделано. Я же привёл в пример библиотеку Loki. Естественно в ей подобных тоже это есть (и про boost я знаю). Я же не могу перечислять все библиотеки Но у меня к Вам вопрос — когда это библиотека boost стала стандартом?
Herb Sutter
The function facility, recently adopted by the C++ standards committee, provides a generalized way of working with arbitrary functions when all you know (or need to know) is their signature. In fact, as it turns out, you don't even need to know the target function's exact signature -- any target function with a compatible signature, meaning one where the parameter and return types are appropriately covertible, will work just fine.
Здравствуйте, MaximE, Вы писали:
A>> Но у меня к Вам вопрос — когда это библиотека boost стала стандартом?
M>
Herb Sutter
M> The function facility, recently adopted by the C++ standards committee
Здесь Саттер не вполне точен: в настоящий момент некоторая часть "фич" внесена голосованием
членов комитета в Technical Report 1, который стандартом не является. В частности, эти "фичи"
в очередной стандарт могут и не войти: нормативным документом TR не является.
Posted via RSDN NNTP Server 1.6 RC1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Herb Sutter
M>> The function facility, recently adopted by the C++ standards committee
ПК>Здесь Саттер не вполне точен: в настоящий момент некоторая часть "фич" внесена голосованием ПК>членов комитета в Technical Report 1, который стандартом не является. В частности, эти "фичи" ПК>в очередной стандарт могут и не войти: нормативным документом TR не является.
А если не войдут, придется смахнуть пыль со старого доброго BFG9000 и навестить заседание комитета
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте, MaximE, Вы писали:
A>>> Но у меня к Вам вопрос — когда это библиотека boost стала стандартом?
M>>
Herb Sutter
M>> The function facility, recently adopted by the C++ standards committee
ПК>Здесь Саттер не вполне точен: в настоящий момент некоторая часть "фич" внесена голосованием ПК>членов комитета в Technical Report 1, который стандартом не является. В частности, эти "фичи" ПК>в очередной стандарт могут и не войти: нормативным документом TR не является.
С передачей указателя на функцию в качестве параметра темплейта проблем нет:
template < class T, short ( fn ) ( T * ) >
short some_func ( T * i_val )
{ return fn ( i_val ); }
Я столкнулся с проблемой, что в примере выше нельзя передать даже
инстанциированный шаблон функции в качестве параметра шаблона.
template < class T > inline
short func ( T * i_val )
{ return 0; }
Это в VC6. В gcc такой подход нормально работает.
WH>Здравствуйте, Снорк, Вы писали:
WH>2all: Ну зачем такие сложности?