Тестируете в Visual Basic?
Alexey Navoykov:
Нужно чтобы из функции F можно было получить доступ к классу B.
Классы инкапсулированы, то есть изначально не предназначены чтобы к ним был доступ извне.
И какой смысл мозги себе выворачивать на изнанку с этими классами? Ошибки потом в таком коде невозможно будет найти...
Не проще ли только с функциями работать?
Не понял Вас.
Укажите Имя, Фамилию и Отчество терминала. Вы же на техническом форуме :)
Информацию брать: после перезагрузки терминала первые три строчки из окна "Инструменты" из вкладки "Журнал".
Укажите Имя, Фамилию и Отчество терминала. Вы же на техническом форуме :)
Информацию брать: после перезагрузки терминала первые три строчки из окна "Инструменты" из вкладки "Журнал".
Укажите все необходимые данные сразу в первом сообщении. Это ведь элементарное уважение: указать на чём тестируете.
template<typename T> class A { }; class B { }; template<typename T> void F(A<T>*) { Print(__FUNCSIG__); } void OnStart() { A<B*> a; A<B> b; F(&a); F(&b); }
void F<B*>(A<B*>*) void F<B>(A<B>*)
Задача была получить класс B.
ну так и получили же
В общем единственный работающий вариант пока такой:
template<typename T> void __Temp(const T* ptr) { new T; } template<typename T> void __Temp(const T& obj) { new T; } template<typename T> void F(A<T>&) { static T a; __Temp(a); }
Но недостаток в том, что если T = класс, то в функции F создаётся объект с конструктором по умолчанию, а такого конструктора может не быть.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Наткнулся на такой досадный баг компилятора. Билд 1961.
Ломаю голову, как обойти этот баг. Нужно чтобы из функции F можно было получить доступ к классу B. Если объявить аргумент как A<T>, то мы получим тип указателя, а не класса.
В общем виде задача состоит в том, чтобы развести A<T> и A<T*> по разным функциям, т.е. отдельно обрабатывать классы, отдельно указатели:
Но в MQL не работает ни перегрузка шаблонов, ни даже просто сигнатура A<T*>.