Здравствуйте.
Как описать функцию, которая должна определить тип данных, с которым работает класс? И как в эту функцию передать сам тип данных, но не в виде строки, а что бы можно было использовать константы перечисления ENUM_DATATYPE
В данном случае важно лишь различать указатель любого типа от всего прочего.
ENUM_DATATYPE, в качестве типа переменной type - компилятор не пропускает
И не пропустит, ENUM_DATATYPE из MQL5 так-то, в 4 нет такого перечисления. Или форум не тот выбрали?
В указанную функцию можно передать лишь идентификаторы, перечисленные в ENUM_DATATYPE, или числа от 1 до 14, что одно и то же. К типам (bool, int, ...) эти значения никакого отношения не имеют. Поэтому функция всегда возвращает false. Чтобы она работала шире, нужно создать свой enum и включить в него другие требуемые значения параметра.
bool IsPoiter(const string type) { if(type =="int") return(false); ... return(true); }Но я сознательно хочу уйти от сравнения строк т. к. считаю, что сравнение строк требует больше времени. При этом возникает проблема передачи самого параметра в функцию, при её вызове. С реализацией сравнения строк ясно, что вызов функции выглядит так:
IsPointer(typename(T1))
а если уйти от строк, то, как должен будет выглядеть вызов функции? Возможен ли другой способ реализации, в обход сравнения строк?
void OnStart() { Тип(1255.0); Тип(1255); } void Тип(int Параметр) // Ну это пример. Вместо void надо bool и возвращать true false { Alert(Параметр, " - целое число"); } void Тип(double Параметр) { Alert(Параметр, " - число двойной точности"); }
Перегрузка функций – это создание нескольких функций с одним именем, но с разными параметрами
Перегрузка функций
Приведите простейший пример такого указателя
То, что Вы делаете, имеет отношение к профиту? Или Вы, как я в детстве, стремитесь познать всю глубину данного языка программирования? ИХМО, искусство программирования не в глубочайшем знании языка (на это есть справка F1), а в умении изящно описать сложный алгоритм сочетанием простых средств.
"...Как описать функцию, которая должна определить тип данных, с которым работает класс? И как в эту функцию передать сам тип данных..."
Старею...
Приведите простейший пример такого указателя
class Color { ... }; Color *pointer = new Color();
То, что Вы делаете, имеет отношение к профиту?
ИХМО, искусство программирования не в глубочайшем знании языка (на это есть справка F1), а в умении изящно описать сложный алгоритм сочетанием простых средств.
Я намерен сделать так, что бы у меня был описан и подключен один единственный класс: ArrayList<любой тип данных>, а не зоопарк из CArrayDouble, CArrayInt и т. д.
Как раз таки я и пытаюсь описать сложный алгоритм, а сложность его в том, что он должен обработать любой тип данных.
Вот Ваш класс прекрасно перегрузился
#property strict class Color { int x; }; void OnStart() { Color *pointer = new Color(); if(Тип(1255.0)) Alert("Указатель"); if(Тип(1255)) Alert("Указатель"); if(Тип(pointer)) Alert("Указатель"); } bool Тип(Color* Параметр) { Alert("Параметр - указатель на Color"); return true; } bool Тип(int Параметр) { Alert(Параметр, " - целое число"); return false; } bool Тип(double Параметр) { Alert(Параметр, " - число двойной точности"); return false; }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как описать функцию, которая должна определить тип данных, с которым работает класс? И как в эту функцию передать сам тип данных, но не в виде строки, а что бы можно было использовать константы перечисления ENUM_DATATYPE
В данном случае важно лишь различать указатель любого типа от всего прочего.
ENUM_DATATYPE, в качестве типа переменной type - компилятор не пропускает