шаблонные строковые функции

Тема в разделе "Общие вопросы по С и С++", создана пользователем MrKarapuz, 9 ноя 2009.

  1. MrKarapuz

    MrKarapuz Гость

    решил написать несколько строковых функций, так чтоб работали со строками разных типов
    вот одна из них
    делает поиск символа в строке, возвращает индекс или -1 если не найден

    Код (Text):
    template<class TYPE>
    inline SIZE_T   str_find_symn(const TYPE* pSrc,TYPE Symbol,SIZE_T Count){
    SIZE_T  Index;
    switch(sizeof TYPE){
    case 1:
    __asm__("repne; scasb; cmovnel %2,%%ecx":"=c"(Index),"=D"(pSrc):"rm"(Count),"D"(pSrc),"c"(Count),"a"(Symbol));
    break;
    case 2:
    __asm__("repne; scasw; cmovnel %2,%%ecx":"=c"(Index),"=D"(pSrc):"rm"(Count),"D"(pSrc),"c"(Count),"a"(Symbol));
    break;
    case 4:
    __asm__("repne; scasl; cmovnel %2,%%ecx":"=c"(Index),"=D"(pSrc):"rm"(Count),"D"(pSrc),"c"(Count),"a"(Symbol));
    break;
    default:
    return -1;
    }
    return Count-Index-1;
    }
    проблема состоит в том что при вызове например так
    Код (Text):
        str_find_symn("asdasd",123,6);
    не компилит и выводит следущую ошибку
    error: no instance of function template "str_find_symn_" matches the argument list
    1> argument types are: (const char [7], int, int)
    1> str_find_symn("asdasd",123,6);

    то есть как я понял компилятор не преобразовывает 123 к типу char
    если написать так
    Код (Text):
    str_find_symn("asdasd",(char)123,6);
    то все нормально

    теперь вопросы
    1. как сделать так чтоб при каждом вызове мне не приходилось преобразовывать типы
    2. как проверку на размер типа сделать через условную компиляцию. (при оптимизации он конечно обрубает лишние case, но хотелось бы чтоб на стадии отладки их тоже не было)


    компидятор Intel 10
     
Загрузка...
Похожие Темы - шаблонные строковые функции
  1. Andersen1313
    Ответов:
    0
    Просмотров:
    1.739
  2. Andersen1313
    Ответов:
    1
    Просмотров:
    1.820

Поделиться этой страницей