Ошибка компилятора - неправильная перегрузка методов - страница 2

 
Алексей Тарабанов:

Вроде, уже объяснил. Если в с++ "что родилось, то уже родилось", то в MQL мутация генов родителя влечет соответствующее изменение генов уже рожденных детей. 

Никак не соответствует генетике, но вполне имеет право на жизнь и даже интересненько... 

Если я правильно понял исходный пост. 

Поняли правильно, но вывод что интересненько неправильный - потому что в нашем случае (программирование) прежде всего нужна стабильность. Допустим Вы взяли интересненькую библиотеку... построили на её основе программу... все работает... далее создатель библиотеки решил её улучшить (хотел как лучше)... добавил новые методы. В С++ будут вызываться старые методы и все будет по прежнему работать... а в MQL в ряде случаев вместо старых будут вызываться уже новые методы и программа будет работать уже по другому и даже возможен принципиально иной результат (получилось как всегда)

 
A100:
Поняли правильно, но вывод что интересненько неправильный - потому что в нашем случае (программирование) прежде всего нужна стабильность. Допустим Вы взяли библиотеку... построили на её основе программу... все работает... далее создатель библиотеки решил её улучшить (хотел как лучше)... добавил новые методы. В С++ будут вызываться старые методы и все будет по прежнему работать... а в MQL будут вызываться в ряде случае новые методы и программа будет уже работать по другому и даже возможен принципиально иной результат (получилось как всегда)

Да я не программист, я кибернетик. Оттого и интересненько:)

 
A100:

Нет... здесь нет ошибок

даже если забыть про несоблюдение принципа, выбирается не та специализация.

 
TheXpert:

даже если забыть про несоблюдение принципа, выбирается не та специализация.

Выбора как такового нет (он не завершен) потому что в процессе выбора возникает ошибка.

С++:  C::f подходит... выбор завершен

MQL: C::f подходит... а давайте ещё посмотрим что там в базовом... ба! да там ошибка! - её и получите

 
A100:

Выбора как такового нет (он не завершен) потому что в процессе выбора возникает ошибка.

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

и если убрать ошибку компиляции, mql выберет функцию C_, которая менее узкая специализация. что как по мне неправильно

 
TheXpert:
и если убрать ошибку компиляции, mql выберет функцию C_, которая менее узкая специализация. что как по мне неправильно

Если убрать ошибку при компиляции то это будет уже другой код:

template<typename T>
struct A { int a; };
struct B {};
struct C1 {
    template<typename T> static void f(  T & ) { Print( __FUNCSIG__ ); } //(1)
};
struct C2 : C1 {
    template<typename T> static void f(A<T>& ) { Print( __FUNCSIG__ ); } //(2)
};
void OnStart()
{ 
    A<B> a;
    C2::f(a);
}

Как минимум не логично предъявлять Разработчикам ошибку без правильного кода

Результат:   void C1::f<A<B>>(A<B>&)

Ожидалось: void C2::f<   B  >(A<B>&)

 
Алексей Тарабанов:

Да я не программист, я кибернетик. Оттого и интересненько:)

А я вот смотрю на такие темы, и думаю: как хорошо, что я на MQL системы не делаю. Из терминала в С++, и никаких вопросов даже не возникает.)

И, заметьте, ни одной претензии создателям MQL. Хотя, была одна - индикатор на графике одно показывает, а в его буферах, читаемых из эксперта, близкие, но существенно другие значения. Где-то тема была.

 
Yuriy Asaulenko:

А я вот смотрю на такие темы, и думаю: как хорошо, что я на MQL системы не делаю. Из терминала в С++, и никаких вопросов даже не возникает.)

И, заметьте, ни одной претензии создателям MQL. Хотя, была одна - индикатор на графике одно показывает, а в его буферах, читаемых из эксперта, близкие, но существенно другие значения. Где-то тема была.

Да ладно... не кокетничайте. 

 
Алексей Тарабанов:

Да ладно... не кокетничайте. 

А посмотрите, сколько подобных тем только за неделю. Непрограммисту, конечно, интересненько.

 
Я спать. 
Причина обращения: