Ошибки, баги, вопросы - страница 3673

 
Maxim Kuznetsov #:

в чём проблема ?

Нет ответа от MQ.
 

Друзья, подскажите как реализовать перегрузку функций

bool func(string text);
bool func(double text);
bool func(int text);
bool func(color text);

string func();
double func();
int    func();
color  func();  

Результат function 'CMemory::Save' already defined and has different return type        CMemory.mqh     21      22

Хотелось бы иметь перегрузку по возвращаемому типу, как реализовать ?

 
Vladimir Pastushak #:
Хотелось бы иметь перегрузку по возвращаемому типу, как реализовать ?
Никак
 
Нужен обязательно какой-то параметр, по которому они будут различаться. Это может быть какой-то псевдо параметр, который в самой функции не используется.

string func(string arg);
double func(double arg);
int    func(int arg);
color  func(color arg);
s  = func(s);
d = func(d);
i = func(i);
c = func(c);  


 
Vladimir Pastushak #:

Друзья, подскажите как реализовать перегрузку функций

Хотелось бы иметь перегрузку по возвращаемому типу, как реализовать ?

в схожей ситуации, getter`ы просто назвал подругому :-)

в псевдокоде:

class MyContainer {
public:

bool Set(double):
bool Set(string):
bool Set(const double &arr[]):

string String();
double Double();
int ToArray(double &save[]);
};

читаемость кода не пострадала :-)

 
Sergey Gridnev #:
Никак

Мне так не нравиться. Переделывайте 😅


Вопрос из серии "Глупый вопрос не заданный вопрос"

Почему имея и зная тип возвращаемой функции компилятор не может выбрать функцию по типу?

string text  = func(); должна вызваться string func();
double value = func(); должна вызваться double func();
int    value = func(); должна вызваться int func();
color  cvet  = func(); должна вызваться color func();

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

Интересно почему это не реализовано? Расширило бы сильно возможности перегрузки функций и методов...

 
Vladimir Pastushak #:
Почему имея и зная тип возвращаемой функции компилятор не может выбрать функцию по типу?

Потому что :-)

void bar(string) { }

void bar(double) { }

и кто из них должен быть вызван при bar(func()) ??

 
Maxim Kuznetsov #:

Потому что :-)

void bar(string) { }

void bar(double) { }

и кто из них должен быть вызван при bar(func()) ??

void bar(string) { }  должна вызваться string func();

void bar(double) { } должна вызваться double func();

 
Vladimir Pastushak #:

void bar(string) { }  должна вызваться string func();

void bar(double) { } должна вызваться double func();

ещё раз, по буквам буквально :-)

у пользователя, программиста, имеется две функции bar() - одна от string, другая от double..

если как вы предполагаете возможны функции string func() и double func() , то есть одноимённые и с разными типами

то какие конкретно функции должен выбрать компилятор увидев строчку bar(func()) ? у него будет два варианта bar(string) + string func() или bar(double) + double func() и который из них он должен выбрать ? 

 
Maxim Kuznetsov #:

ещё раз, по буквам буквально :-)

у пользователя, программиста, имеется две функции bar() - одна от string, другая от double..

если как вы предполагаете возможны функции string func() и double func() , то есть одноимённые и с разными типами

то какие конкретно функции должен выбрать компилятор увидев строчку bar(func()) ? у него будет два варианта bar(string) + string func() или bar(double) + double func() и который из них он должен выбрать ? 

Ну так то да (((