![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем доброго времени суток.
к примеру, имеем такой класс:
далее, есть некоторый магический макрос который используется так:
цель - развернуть этот макрос и в нечто подобное static_assert(has_member<&type1::m1>::value);
т.е. нужна проверка на предмет того, что юзер перечислил правильные имена методов. для этой цели подходит SFINAE. но каждый такой шаблон нужно генерировать для проверки только одного метода. а это не удобно, и удваивает вероятность ошибки. какие варианты? Добавлено @ 21:44 смотрю на boost.enable_if. вроде то, но и не могу понять как его использовать для конкретной задачи... Это сообщение отредактировал(а) boostcoder - 22.7.2011, 21:50 |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
a зачем такая акцептация внимания на классе как на интерфейсе ? так еще с кучей опечаток.. по сути, как я понял, Вам нужна проверка на наличие метода для любого произвольного метода, без принуждения задавать для каждого имени индивидуальный "тестер".. но тут опять не понятно, Вам важно наличие метода с определенным именем, или ж еще и с определенной сигнатурой ? |
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
а что не так? не понял... ну извините. время позднее. моцг спать хочет.
не уверен что правильно понял.
с определенным именем. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
=0 может быть только у виртуальных методов, а у вас обычные, да и наследования нет, но это можно списать на опечатки, но вводит в заблуждение то, что без этих "=0" писанины меньше, а пример обхватывал большую область.. т.е. непонятно зачем в пример приведен абстрактный, а не простой класс ![]() хотя уже понятно : ![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
так и есть. а по поводу топика, есть предложения? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну классический вариант это создание двух макросов : DEFINE_MEMFN_DETECTOR и DETECT_MEMFN я так понимаю Вас этот вариант не устраивает ? Добавлено через 1 минуту и 21 секунду тогда моими другими предложениями будет пересмотреть архитектуру задумки ![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
нет. цель - уменьшить вероятность ошибки при указании пользователем имен методов. если использовать еще и генерирующий SFINAE-шаблон макрос, то вероятность удвоится. Добавлено через 2 минуты и 45 секунд
вот и я думаю, плюнуть на все попытки реализовать introspection+reflection языковыми средствами и макросами, и написать плагин для gcc+mingw, у которого возможностей и информации гораздо больше чем у меня при использовании макросов и шаблонов... |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
без отражения метода на что нибудь, его имя нельзя применить к любому классу, а значит полюбому придется делать "лишний" генератор..
Добавлено через 2 минуты и 5 секунд
давно на это намекаю ![]() Это сообщение отредактировал(а) mes - 23.7.2011, 14:10 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
я это тоже понимаю. но была надежда на то, что возможно я не все понимаю ![]() ну я только недавно нашел документацию по реализации плагинов для gcc+mingw... надо пробовать.. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
другой вариант .. ммм.. как бы это назвать.. это построение именного интерфейса..
уже где то приводился пример.. чуть позже напишу поподробней.. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ок. спасибо. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |