Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > аргумент - функция |
Автор: ss 19.3.2017, 17:45 |
У меня есть дерево. Делаю алгоритм обхода дерева. Чтобы для каждого дерева не делать одну и ту же механику, хочу сделать универсальную. функ. forAllNode(Tree*t, func f, Node* n); параметр func - это некая функ. применяемая ко всем элементам дерева. вот как-то так: typedef void (*Func)(Node*); void forAllNode(Tree*t, Func f, Node* n); можно ли как-нибудь функ.-обработчик(Func) сделать шаблонной ? т.к. возможно функ.-обработчик возможно будет возвращать какое-либо значение ? |
Автор: xvr 20.3.2017, 15:27 |
Шаблонной (в терминах С++) только если сама forAllNode так же будет шаблонной. Если же надо просто вернуть некоторое значение, то так вашу функцию и опишите - typedef int (*Func)(Node*); (int устроит в качестве возвращаемого значения?) |
Автор: ss 20.3.2017, 18:16 |
forAllNode эта функ. которая будет рекурсивно вызываться проходя по всем элементам дерева и для каждого элемента будет вызывать обработчик func f. Можно ли сам обработчик сделать шаблонным вместе с forAllNode не указывая явно тип void, int ... ? что-то такое : forAllNode<T>(t, f<T>, n) просто, иногда от обработчика может понадобится какой-либо результат. |
Автор: xvr 20.3.2017, 22:29 |
Как вы этот результат собираетесь использовать в forAllNode если вы заранее не знаете, что именно в него может вернуть обработчик? У вас же функция forAllNode одна на все узлы. Дайте пример, как вы собираетесь использовать возвращаемое обработчиком значение. |
Автор: ss 21.3.2017, 19:19 |
обработчик будет написан любой. Возвращать или не возвращать значение обработчик будет в зависимости от его реализации. Механика обхода дерева будет одна. Меняются только данные и функция применяемая к узлам дерева. Напр. обработчик который будет выполнять : поиск некого элемента и вернуть значение, а значение может быть любым как std:list, или ссылку на узел дерева; заменить одни значения другими и ничего не возвращать или вызвать метод некого объекта который содержится в узле для каждого элемента дерева. ну и все в том духе. |