Сообщение Re[8]: Вопрос знатокам от 04.04.2023 22:48
Изменено 04.04.2023 23:02 kov_serg
Re[8]: Вопрос знатокам
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, kov_serg, Вы писали:
R>http://coliru.stacked-crooked.com/a/4b8d981c3e71c47b
Тут можно знатно огрести и потом долго отлаживать.
R>Сразу оговорюсь, что для встроенных типов ADL таким образом не работает. Но я сильно сомневаюсь, что упомянутые выше "портянки" появляются исключительно от использования встроенных типов.
Нет для базовых типов только не для всех, а для этих bool,char,unsigned char,signed char,int,unsigned int,short,unsigned short,long,unsigned long,long long,unsigned long long,float,double
для более специализированных типа std::string и хочется что бы оно искало функцию по сигнатуре. если такая объявлена то пусть использует если нет, то не собирается.
Вот что я хотел:
R>Здравствуйте, kov_serg, Вы писали:
R>http://coliru.stacked-crooked.com/a/4b8d981c3e71c47b
Тут можно знатно огрести и потом долго отлаживать.
R>Сразу оговорюсь, что для встроенных типов ADL таким образом не работает. Но я сильно сомневаюсь, что упомянутые выше "портянки" появляются исключительно от использования встроенных типов.
Нет для базовых типов только не для всех, а для этих bool,char,unsigned char,signed char,int,unsigned int,short,unsigned short,long,unsigned long,long long,unsigned long long,float,double
для более специализированных типа std::string и хочется что бы оно искало функцию по сигнатуре. если такая объявлена то пусть использует если нет, то не собирается.
Вот что я хотел:
// header
struct A {
template<class T> void f(T& t) { void ext_f(T&); ext_f(t); }
};
// impl
#include <stdio.h>
#include <string>
using std::string;
void ext_f(char &v) { printf("char=%d\n",v); }
void ext_f(int &v) { printf("int=%d\n",v); }
void ext_f(string &v) { printf("string=%s\n",v.c_str()); }
int main(int argc, char const *argv[]) {
A a[1];
char c=1; int i=2; string s="string";
a->f(c);
a->f(i);
a->f(s);
return 0;
}
Re[8]: Вопрос знатокам
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, kov_serg, Вы писали:
R>http://coliru.stacked-crooked.com/a/4b8d981c3e71c47b
Тут можно знатно огрести и потом долго отлаживать.
R>Сразу оговорюсь, что для встроенных типов ADL таким образом не работает. Но я сильно сомневаюсь, что упомянутые выше "портянки" появляются исключительно от использования встроенных типов.
Нет для базовых типов только не для всех, а для этих bool,char,unsigned char,signed char,int,unsigned int,short,unsigned short,long,unsigned long,long long,unsigned long long,float,double
для более специализированных типа std::string и хочется что бы оно искало функцию по сигнатуре. если такая объявлена то пусть использует если нет, то не собирается.
Вот что я хотел:
R>Здравствуйте, kov_serg, Вы писали:
R>http://coliru.stacked-crooked.com/a/4b8d981c3e71c47b
Тут можно знатно огрести и потом долго отлаживать.
R>Сразу оговорюсь, что для встроенных типов ADL таким образом не работает. Но я сильно сомневаюсь, что упомянутые выше "портянки" появляются исключительно от использования встроенных типов.
Нет для базовых типов только не для всех, а для этих bool,char,unsigned char,signed char,int,unsigned int,short,unsigned short,long,unsigned long,long long,unsigned long long,float,double
для более специализированных типа std::string и хочется что бы оно искало функцию по сигнатуре. если такая объявлена то пусть использует если нет, то не собирается.
Вот что я хотел:
struct A {
template<class T>void f(T& t) { void ext_f(A*,T&); ext_f(this,t); }
};
#include <stdio.h>
#include <string>
using std::string;
void ext_f(A* self,char &v) { printf("char=%d\n",v); }
void ext_f(A* self,signed char &v) { printf("signed char=%d\n",v); }
void ext_f(A* self,unsigned char &v) { printf("unsigned char=%d\n",v); }
void ext_f(A* self,int &v) { printf("int=%d\n",v); }
void ext_f(A* self,string &v) { printf("string=%s\n",v.c_str()); }
int main(int argc, char const *argv[]) {
A a[1]; char c=1; signed char cs=2; unsigned char cu=3;
int i=4; string s="string";
a->f(c);
a->f(cs);
a->f(cu);
a->f(i);
a->f(s);
return 0;
}
char=1
signed char=2
unsigned char=3
int=4
string=string