Форум программистов, компьютерный форум CyberForum.ru

Шаблонные функции только для определённых типов! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Типизированный файл. Сведения о студентах. Стипендия http://www.cyberforum.ru/cpp-beginners/thread766865.html
Привет) у меня такая задача на туже тему, помогите исправить Вот условие Сформировать типизированный файл, в котором хранятся результаты сессии группы: факультет, группа, семестр, ФИО студента, средняя оценка. Написать программу начисления стипендии по результатам сессии (стипендия = средняя оценка х 50 руб). и текст программы //24. Сформировать типизированный файл, в котором...
C++ F A S M Помогите пожалуйста! Я увлекаюсь программированием, и скачал FASM, как знаете, он открытый проект. Так вот, я хочу изменить этот FASM и выместить в интернете с сcылкой на источник - официальный сайт fasm-a. Можно ли мне это сделать? Ну то есть выместить в интернете? А да ещё, есть вопрос по циклам (и не только. Тaкже интересуют условия - if,else,elseif (как их использовать) и т.д.) Помогите чем... http://www.cyberforum.ru/cpp-beginners/thread766861.html
Си-идентификатор C++
необходимо проверить является ли строка си-идентификатором. какие для этого критерии существуют? 1. первый символ не может быть цифрой 2. любой символ - , , , _ это, что я знаю. вопросы: 1. есть еще длина строки, какой она должна быть, кто говорит до 31, кто еще что-то. вы как думаете? во всех источниках по разному O_O
C++ Времена года и месяцы
Написать программу, которая выводит на экран приглашение: «Введите месяц», вводит с клавиатуры число X, имеющее смысл месяца, и печатает слова «Зима», «Весна», «Лето» или «Осень» в зависимости от введенного месяца. Программа должна реагировать на ввод неправильного месяца: меньше 1 или больше 12. Заранее благодарю. :)
C++ Как представляются двумерные массивы? http://www.cyberforum.ru/cpp-beginners/thread766834.html
Создал двумерный массив. И немного не врубаюсь. Если пиши вот так вот mas выводит 0, если вот так вот mas, то выводит 10. Ну а если вот так вот mas, то выводит 10. Собственно как я понял, что в случае mas мы выходим за границу массива и попадаем на элемент mas. Вопрос: всегда в двумерном массиве именно такая последовательность расположения ячеек памяти для массива, что они идут друг за другом?...
C++ Разработать наследование классов прямоугольный треугольник от треугольник Разработать наследование классов прямоугольный треугольник от треугольник подробнее

Показать сообщение отдельно
popelyuk
 Аватар для popelyuk
8 / 8 / 1
Регистрация: 04.12.2012
Сообщений: 130

Шаблонные функции только для определённых типов! - C++

20.01.2013, 12:20. Просмотров 825. Ответов 18
Метки (Все метки)

Как сделать чтобы для шаблонной функции генерировались только экземпляры для нескольких заданных типов, а остальные не генерировались?
Следующее определение не помогает (в конце кода):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
template <typename str_type>
double strToDouble(str_type *in_add, const str_type decimal_separator='.');
 
template <typename str_type>
double strToDouble(str_type *in_add, const str_type decimal_separator) {
    auto_arr<str_type> str=cloneStr(in_add); // for sake able to modify
    str_type *int_pos(str), *fract_pos(0), *exp_pos(0);
    if((*str=='+')||(*str=='-')) str++;
    bool is_hex((str[0]=='0')&&(str[1]=='x'));
    while(*str!=0) {
        if((*str==decimal_separator)&&(fract_pos==0)) *str=0, fract_pos=++str;
        if(((*str=='e')||(*str=='E'))&&(exp_pos==0)) {
            if(is_hex&&((str[1]!='0')||(str[2]!='x'))) continue;
            *str=0; exp_pos=++str; break;
        }
    }
    // check here that the fractional, integer and exponential part not equal zero !!
    double out_number=strToInt(int_pos);
    if(fract_pos) {
        out_number;
    }
    if(exp_pos)
    return out_number;
}
 
template double strToDouble(char *in_add, const char decimal_separator);
template double strToDouble(wchar_t *in_add, const wchar_t decimal_separator);
проблема состоит в том что если вызвать функцию как:
C++
1
std::cout<<"strToDouble="<<strToDouble("k")<<std::endl;
то подставляется const char вместо str_type, а надо просто char, потому что тогда всё что внутри объявлено с типом str_type нельзя изменять что никоим образом мне не подходит! Помогает:
C++
1
std::cout<<"strToDouble="<<strToDouble<char>("k")<<std::endl;
но это не удобно постоянно писать тип при вызове функции, теряется весь смысл "template'ности" ))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru