M
MrKarapuz
решил написать несколько строковых функций, так чтоб работали со строками разных типов
вот одна из них
делает поиск символа в строке, возвращает индекс или -1 если не найден
проблема состоит в том что при вызове например так
не компилит и выводит следущую ошибку
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
если написать так
то все нормально
теперь вопросы
1. как сделать так чтоб при каждом вызове мне не приходилось преобразовывать типы
2. как проверку на размер типа сделать через условную компиляцию. (при оптимизации он конечно обрубает лишние case, но хотелось бы чтоб на стадии отладки их тоже не было)
компидятор Intel 10
вот одна из них
делает поиск символа в строке, возвращает индекс или -1 если не найден
Код:
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;
}
проблема состоит в том что при вызове например так
Код:
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
если написать так
Код:
str_find_symn("asdasd",(char)123,6);
теперь вопросы
1. как сделать так чтоб при каждом вызове мне не приходилось преобразовывать типы
2. как проверку на размер типа сделать через условную компиляцию. (при оптимизации он конечно обрубает лишние case, но хотелось бы чтоб на стадии отладки их тоже не было)
компидятор Intel 10