Вопрос по типизации - страница 5

 
Ilya Malev:
П.С., а, т.е. Вы хотели перегрузить бинарный оператор как унарный (2-арный как 1-арный), тогда да, конечно не дат. Единственное исключение - []

да, в MQL жестко прописано, что и как перегружать, в том С++, да пофиг, что перегружать, как перегрузите так и вызывать будете - перегрузили ^ как унарный так и будете унарным юзать в дальнейшем

 
Igor Makanu:

да, в MQL жестко прописано, что и как перегружать, в том С++, да пофиг, что перегружать, как перегрузите так и вызывать будете - перегрузили ^ как унарный так и будете унарным юзать в дальнейшем

Да, похоже ограничений в mql все ещё много, есть куда развиваться :)

Я бы тоже не отказался от возможности перегружать бинарные операции как унарные (и наоборот)

Поскольку в любом случае при перегрузке их изначальный смысл чаще всего теряется, соответственно логика использования с этим смыслом уже не связана. Было бы логично разрешить.

 
Ilya Malev:

Да, похоже ограничений в mql все ещё много, есть куда развиваться :)

очень много, причем эти ограничения то появляются, то исчезают, то пять... такое ощущение, что разработчики иногда меняют среду разработки )))

как пример, в справке в разделе перегрузка операций (operator)  примеры работы с матрицами сейчас не компилируются, а точно знаю, что раньше они работали, сейчас появилась проверка на тип параметров которые участвуют в перегрузке операций, т.е. если у меня

int operator*(const int) то int operator*(int)  - не будет компилироваться и в справке такой пример был, который перестал компилироваться

 
Ilya Malev:

Уважаемые программисты, давно ломаю голову над вопросом. Можно ли как-то исхитриться и сделать неявную типизацию возвращаемого значения функции? Чтобы метод класса возвращал значение различного типа при внешней идентичности обращения к методам.

А можно поинтересоваться: Вам для каких целей сие нужно? Звездолет без этого не получается собрать?

 
Vasiliy Sokolov:

А можно поинтересоваться: Вам для каких целей сие нужно? Звездолет без этого не получается собрать?

А можно поинтересоваться: Вы с какой целью интересуетесь?

 

А между прочим это даже не перегрузка по возвращаемому типу.

Вообще эта идея очень очень далека от возможности ее реализации.

 
Vasiliy Sokolov:

А можно поинтересоваться: Вам для каких целей сие нужно? Звездолет без этого не получается собрать?

Я сначала тоже критически отнёсся, а потом подумал - я бы и усебя применение нашёл:

class Point {
public:
   double price;
   long time;
   operator double()const {return price;}
   operator long()const {return time;}
};

class Array {
   Point p[3] = {{0,1}, {2,3}, {4,5}};
public:
   const Point &operator[](unsigned i) {return p[i];}
};

void start()
{
   Array a;
   double d = a[2];  // d == 4
   long t = a[2];    // t == 5
}
 
Dmitry Fedoseev:

А между прочим это даже не перегрузка по возвращаемому типу.

Captain Obvious to the resque?

 
Ilya Malev:

Captain Obvious to the resque?

Если, что - Shift+Alt, если забылось.

 
В C# есть explicit и implicit преобразования. Вроде удобный сахар, но очень неявно и IntelliSense будет молчать. Через месяц забудете во что какой класс можно преобразовать. Игра в ООП в общем, но мило.