Re[6]: шаблонный виртуальный метод
От: B0FEE664  
Дата: 30.06.15 15:11
Оценка:
Здравствуйте, Went, Вы писали:

BFE>>Вроде бы ничего экстраординарного. Я что-то упускаю? (ну, кроме dll и so, конечно)

W>По-моему, такая реализация лишает всю затею смысла:
W>1. Представьте, что где-то есть шаблон-наследник класса А. Теперь программист начинает ручками дописывать все возможные инстанции для всех виртуальных шаблонов методов?
Нет, вы не поняли. Запись:
void B::virt_fun<int>(int) = default;

должна заставлять компилятор сгенерить по уже известному шаблону тело данной функции.

W>2. Представьте, что программист знает, что шаблон функции virt_fun для класса B с параметром std::string никогда не потребуется на практике, он используется только для А. Он все равно должен будет сообщить об этом компилятору чем-то вроде:

W>
W>//virtual
W>void B::virt_fun<std::string>(std::string) = 0;
W>

W>чтобы, если программа где-то изменится, и этот вызов все-таки произойдет, получить pure virtual function call? Неплохое поле для неожиданных ошибок.

Я такого не предлагаю.

W>3. Ваша идея неплохо решается на обычном С++ с ручной регистрацией обработчиков — под двум type_id — this и T. Чуть более многословно, но это можно все элегантно порулить макросами.

Всё можно написать руками, но не удобно — легко допустить ошибку. Собственно, только по этому и нужно то, что я предлагаю.
Я не использую макросы и вам не советую.

W>4. То, что вы предлагаете, по сути, не шаблон виртуальной функции, а автоматизация перегрузки виртуальных функций (которая, и без автоматизации в С++ работает плохо) с перекладыванием части работы на линковщик (что тоже явно С++ придется не по вкусу).

А что же тогда шаблон виртуальной функции?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.