обратите внимание на функцию get_stat(). эта финукция генерится препроцессором, т.е. не руками. но вопрос не в этом. вопрос в красивости =)
можно ли как-то это сделать по-красивей и переносимей?
в масив-то не положишь их — сигнатуры могут быть разными...
в switch() — тоже, но не из-за сигнатур.
какие идеи?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>вопрос скорее не про сравнение, но про поиск среди множества MFP одного конкретного. X>ситуация: есть некоторое кол-во MFP. сейчас сабж реализован таким способом: X>обратите внимание на функцию get_stat(). эта финукция генерится препроцессором, т.е. не руками. но вопрос не в этом. вопрос в красивости =) X>можно ли как-то это сделать по-красивей и переносимей? X>в масив-то не положишь их — сигнатуры могут быть разными... X>в switch() — тоже, но не из-за сигнатур.
X>какие идеи?
Сделать get_stat метафункцией — такой вариант не катит? Ну то есть, сделать входной указатель на функцию-член параметром шаблона и результат вычислить в компайл-тайме путем набора специализаций?
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Сделать get_stat метафункцией — такой вариант не катит? Ну то есть, сделать входной указатель на функцию-член параметром шаблона и результат вычислить в компайл-тайме путем набора специализаций?
если я тебя правильно понял — тогда идентификатором мембер-функции будет сигнатура?
а значит, два мембера-функции с одинаковой сигнатурой будут восприниматься как одно и тоже?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
R>>Сделать get_stat метафункцией — такой вариант не катит? Ну то есть, сделать входной указатель на функцию-член параметром шаблона и результат вычислить в компайл-тайме путем набора специализаций?
X>если я тебя правильно понял — тогда идентификатором мембер-функции будет сигнатура? X>а значит, два мембера-функции с одинаковой сигнатурой будут восприниматься как одно и тоже?
Нет-нет, параметром должен стать именно указатель на фунцию-член — нетиповой параметр шаблона. Правда там и тип тоже придется таскать за собой, к сожалению, поэтому везде появляется эдакое заикание, вида: get_stat<decltype(&type::m1), &type::m1>(). Но этот тот случай, когда можно и макросом не побрезговать.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, _NN_, Вы писали:
_NN>>Как насчёт перегрузки get_stat по типам и хранением списков методов по типам ?
R>Как я понял, у него возможно существование двух и более функций-членов одного типа.
Так я и предлагаю для каждого типа создавать свой список.
Здравствуйте, niXman, Вы писали:
X>привет!
... X>обратите внимание на функцию get_stat(). эта финукция генерится препроцессором, т.е. не руками. но вопрос не в этом. вопрос в красивости =) X>можно ли как-то это сделать по-красивей и переносимей? X>в масив-то не положишь их — сигнатуры могут быть разными... X>в switch() — тоже, но не из-за сигнатур.
X>какие идеи?
Я конечно понимаю что цель это просто сбор статистики по функциям. Но так как в C++ соверешшно у@$&щные указатели на члены класса
Я бы использовал другие идентификаторы, напимер enum с названиями функций.
Здравствуйте, kov_serg, Вы писали:
_>Я конечно понимаю что цель это просто сбор статистики по функциям. Но так как в C++ соверешшно у@$&щные указатели на члены класса _>Я бы использовал другие идентификаторы, напимер enum с названиями функций.
коллеги, а может ну её, эту красоту, и так все и оставить?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, rg45, Вы писали:
R>>Как-то так
X>спасибо большое, но как-то совсем сложно получилось =) X>да еще и с дополнительными аллокациями...
Не нужно пользоваться std::map.
Достаточно массива или своего compile_time_map и оформить всё в constexpr
Здравствуйте, _NN_, Вы писали:
_NN>Не нужно пользоваться std::map. _NN>Достаточно массива или своего compile_time_map и оформить всё в constexpr
Использование compile_time_map подразумевает, что указатель на функцию-член должен быть константой времени компиляции? Это означает, что мы должны передать его не через список параметров функции, а как нетиповой параметр шаблона, наподобие как здесь
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, _NN_, Вы писали:
_NN>>Не нужно пользоваться std::map. _NN>>Достаточно массива или своего compile_time_map и оформить всё в constexpr
R>Использование compile_time_map подразумевает, что указатель на функцию-член должен быть константой времени компиляции? Это означает, что мы должны передать его не через список параметров функции, а как нетиповой параметр шаблона, наподобие как здесь