Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
Это сделать невозможно, поскольку в С++ нет reflection и программа не может определить в момент исполнения, у кого есть какой метод. Используй полиморфизм
Здравствуйте, Евгений Коробко, Вы писали:
ЕК>Это сделать невозможно, поскольку в С++ нет reflection и программа не может определить в момент исполнения, у кого есть какой метод. Используй полиморфизм
ну reflection тут не причем вроде, я и не требую рантайма. Ведь функция шаблонная и важно есть ли у типа T такое или нет. если нет то компиллер ругается, важно сделать чтоб не ругалось
Здравствуйте, PoM-PoM 40mm, Вы писали:
PP4>Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
PP4>
Здравствуйте, PoM-PoM 40mm, Вы писали:
PP4>Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
PP4>
Здравствуйте, PoM-PoM 40mm, Вы писали:
PP4>Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
PP4>
PP4>есть ли идеи как моджно выкрутиться?
У Герба Саттера описывается нечто подобное: проверяется. есть ли в классе метод с определенным прототипом. Причем решается на шаблонах.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, PoM-PoM 40mm, Вы писали:
PP4>Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
PP4>
Мне тоже когда-то нужно было подобное. Решил так: вынес нужный метод в отдельный класс и проверял на наличие этого
класса в иерархии предков с помощью boost::is_base_and_derived
PP4>>Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
PP4>>
PP4>>есть ли идеи как моджно выкрутиться? LVV>У Герба Саттера описывается нечто подобное: проверяется. есть ли в классе метод с определенным прототипом. Причем решается на шаблонах.
Там не совсем то, а точнее, совсем не то — без ошибки компиляции проверяется только наличие наследования. Тут же подойдет только SFINAE, но эту технику поддерживают далеко не все компиляторы.
Здравствуйте, PoM-PoM 40mm, Вы писали:
PP4>Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
PP4>
Здравствуйте, korzhik, Вы писали:
K>сорри, немного не ту ссылку дал, правильная у Bell'а
Нет у Bell'а ссылка не правильная. Вот правильная ссылка Re[11]: ЭВРИКА
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: фокусы в шаблонах
От:
Аноним
Дата:
22.10.04 11:09
Оценка:
AS>Там не совсем то, а точнее, совсем не то — без ошибки компиляции проверяется только наличие наследования. Тут же подойдет только SFINAE, но эту технику поддерживают далеко не все компиляторы.
А Л.В. об этом уже говорили ,но он все равно упорно продолжает советовать Саттера в таких случаях
Здравствуйте, PoM-PoM 40mm, Вы писали:
PP4>Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
PP4>
Это идея нашла свою реализацию в COM. Если с — это COM-объект.
IXXX *pPtr = NULL;
if ( SUCCEEDED( c->QueryInterface( IID_IXXX, (void**) &pPtr ))
{ pPtr->f(); pPtr->Release();
}
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, PoM-PoM 40mm, Вы писали:
PP4>>Хотелось бы сделать такой фокус -- шаблонная функция принимает указатель на класс и если в классе есть функция с определенным именем, то вызывает ее. иначе ничего не делается.
PP4>>
Здравствуйте, PoM-PoM 40mm, Вы писали:
PP4>Здравствуйте, Евгений Коробко, Вы писали:
ЕК>>Это сделать невозможно, поскольку в С++ нет reflection и программа не может определить в момент исполнения, у кого есть какой метод. Используй полиморфизм
PP4>ну reflection тут не причем вроде, я и не требую рантайма. Ведь функция шаблонная и важно есть ли у типа T такое или нет. если нет то компиллер ругается, важно сделать чтоб не ругалось