![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
mes, не увеличивает. И более того у меня в гцц-4.4.4 функции, переданные в качестве аргументов шаблонов, вообще никогда не инлайнятся. Что странно.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а тело функции доступно ?
|
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вот полный код:
http://liveworkspace.org/code/0662bfe307bb...b4a3d2738e1d4fa если кто проверит, буду очень признателен. |
||||
|
|||||
georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Дело ещё и в том что мне нужно сгенерировать функцию которая будет принимать указатель на вызываемый метод, и передать её адрес, при этом адрес метода теряется, а хранить и передавать его - это дополнительные расходы в рантайме, пример:
В метод createInquiry я передаю только адрес callback, это 4 или 8 байт, адрес же метода я так не передам потому что типы классов разные, к тому же он может достигать 12 байт в длину, короче это ещё и накладно Добавлено @ 09:49 В общем ClassType должен быть классом, в котором находится метод, что печально А на счет constexpr вы опять правы, но в документации по шаблонам сказано что "параметры шаблона не являющиеся типами могут быть: целочисленный тип или тип перечисления, тип указателя, включая указатели на обычные объекты, функции и члены классов, ссылочный тип (как ссылки на объекты, так и ссылки на функции)" конец цитаты C++ Templates The Complete Guide 2003 Добавлено @ 09:57 кстати, вопрос на засыпку, как из типа указателя на метод класса получить тип класса? это бы очень пригодилось Это сообщение отредактировал(а) georain - 15.10.2010, 09:57 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
georain |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
да, проверьте доступно ли тело функции в точке инстанциирования шаблона, и попробуйте inline __attribute__((always_inline)), он кстати что-то пишет если не может проинлайнить Добавлено через 1 минуту и 51 секунду
это понятно, но
доступно в компиль тайм |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
неа... значение указателя не является известным_в_компиль_тайм.. не смотря на кажушуюся известность.. в общем сравните два выражения :
Добавлено через 1 минуту и 24 секунды и то что константой можно инициализировать массивы, ничего не говорит.. это обходной трюк, из за неимения альтернативных средств.. |
|||
|
||||
georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
=(
А ведь такой код верный:
Это сообщение отредактировал(а) georain - 15.10.2010, 10:21 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ага верный.. предыдущий пример я привел для понимания разницы.. а верный он благодаря сейчас ... |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
вероятно никак. да и не нужно, т.к. (нестатический) метод может быть вызван только в применении к объекту, а тип объекта в рантайм известен |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Добавлено через 14 минут и 20 секунд
если я правильно понял ![]()
Это сообщение отредактировал(а) mes - 15.10.2010, 10:57 |
||||||
|
|||||||
georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Если я узнаю тип класса из указателя на метод, то смогу подставить его в шаблонный параметр для решения проблемы Вы правильно меня поняли, и теперь я смогу это сделать!
Вы помогли мне разобраться со всеми возникшими вопросами, спасибо большое! |
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
так:
http://liveworkspace.org/code/93c11e03d459...18545bef566a57d Up. все же static_assert() предоставляемый компилятором, поудобней ;) Это сообщение отредактировал(а) boostcoder - 13.1.2011, 03:09 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |