Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как элегантно в C++14 сделать template?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
iiv
Добрый день!

до этого писал на С и С++ старого стандарта, а тут под руки попался C++14 с кучей всяких классностей.

Сразу захотелось упростить что-то. Раньше у меня было так:
Код
inline int FU(char M, double A, double B, double *C) { dFU(M, A, B, C); }
inline int FU(char M, float A, float B, float *C) { fFU(M, A, B, C); }
inline int FU(char M, complex A, complex B, complex *C) { cFU(M, A, B, C); }
inline int FU(char M, complex double A, complex double B, complex double *C) { zFU(M, A, B, C); }
inline int FU(char M, qfloat A, qfloat B, qfloat *C) { qfFU(M, A, B, C); }
inline int FU(char M, qdouble A, qdouble B, qdouble *C) { qdFU(M, A, B, C); }
...

то есть FU в зависимости от того, с каким типом аргументов я ее вызвал, подставлялась dFU, fFU ... Хочется это как-то одной строчкой, типа через темплейт и константное выражение, ибо у меня таких функций тысячи, и если писать как у меня написано, описки могут быть... Вот ломаю голову и не понимаю как одной строкой, чтобы красиво.

Вдруг у кого будут идеи, подскажите, пожалуйста!

PS: речь идет о PC-шном g++.

Спасибо

ИИВ
sigmaN
Ну так у вас сейчас идет набор функций отличающийся только типами параметров. Тут прекрасно работает перегрузка, которая в зависимости от типа выбирает нужную функцию. Вроде именно так и сделано у Вас.

Если функции dFU fFU cFU и т.д. тоже отличаются только типами параметров(в чем я очень сомневаюсь) то вы конечно же можете сделать обобщенную реализацию один раз
Код
template<T>
int FU(T M, T A, T B, T *C){
//обобщенная реализация
}
Выигрыш получается в том, что вы пишите функцию один раз, а типы(а вместе с ними и реализации операторов встречающихся внутри функции) будут автоматически подставлены на основании типов параметров которые вы передадите в функцию. Таким образом компилятор за вас сгенерирует все нужные функции.

Если вы не можете сделать обобщенную реализацию чтобы она работала корректно со всеми представленными вами типами то я не знаю как что-то новое в стандартах 11 и 14 может помочь. Будет все равно масло масленное. Ну примените вы вместо перегрузки там какую-нибудь шаблонную магию, явные специализации шаблонов, чтоб понимать с каким типом шаблон сейчас сработал...По вставляете костылей, но все равно для каждого типа получится различная реализация и это будет хитрый способ сделать то-же самое что есть сейчас.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.