Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В один шаблон загонять и обычные переменные и структуры - и в страшном сне такой потребности нее возникнет.
Один вопрос - зачем?
В один шаблон загонять и обычные переменные и структуры - и в страшном сне такой потребности нее возникнет.
Один вопрос - зачем?
Например, для этого.
Например, для этого.
Для "этого" вы справились другими методами (поскоько вопрос темы не решен, а "это" имеется).
Давайте, так, если вы вступаете в разговор, то вы в разговор вступаете - говорите, пишите, а не ссылками кидаетесь? Вот прям щаз побежал кто-то на три часа копать в вашем коде и не толко в коде , а еще и думать, какую же аналогию вы в этом нашли.
Для "этого" вы справились другими методами (поскоько вопрос темы не решен, а "это" имеется).
Давайте, так, если вы вступаете в разговор, то вы в разговор вступаете - говорите, пишите, а не ссылками кидаетесь? Вот прям щаз побежал кто-то на три часа копать в вашем коде и не толко в коде , а еще и думать, какую же аналогию вы в этом нашли.
"В один шаблон загонять и обычные переменные и структуры" бывает удобно
::SymbolInfoTick(::Symbol(), Tick);
MqlTick CloneTick = Tick;
// Работа со структурами
if (_R(Tick) == CloneTick) // Теперь структуры можно сравнивать
::Print("Equal");
// Получения значения требуемого типа по смещению
PRINT(_R(Tick)[(datetime)0]) // Смотрим значение datetime по нулевому смещению в объекте структуры MqlTick - Tick.time
// Получение смещения поля структуры
const int Offset = _OFFSET(Tick, bid); // Нашли смещение в байтах поля bid в объекте структуры MqlTick
PRINT(Tick.bid) // Посмотрели значение Tick.bid
_W(Tick)[Offset] = 1.23456; // Записали по найденному смещению значение (double)1.23456
PRINT(Tick.bid) // Убедились, что Tick.bid теперь равен 1.23456
// Работа со стандартными типами
color Color = C'241,248,255';
PRINT(_R(Color)[(uchar)1]) // Green-составляющая цвета - 248
_W(Color)[2] = (uchar)230; // Записали по смещению 2 значение (uchar)230.
PRINT(Color) // Убедились, что Color теперь C'241,248,230'
// Одновременная работа со смешанными типами
if (_R(Tick) != Color) // Можно сравнивать даже структуры со стандартными типами
::Print("Not equal");
А теперь, господа знатоки, внимание, правильный ответ:
class A
{
public:
template <typename T>
static void Write( T &Value ) { Func(Value); } // иногда бывает полезна не полная синтаксическая запись (A:: или this.)
static void Func( int &Value ) { Value = 1; }
static void Func( string &Value ) { Value = "Hello!"; }
};
// Для оставшихся типов
template <typename T>
void Func( T &Value ) { Value.bid = 123; }
template <typename T>
void Write( T &Value ) { A::Write(Value); }
void OnStart()
{
int a;
MqlTick Tick;
string Str;
Write(a);
Write(Tick);
Write(Str);
Print(a);
Print(Tick.bid);
Print(Str);
}
Фактически, это то же самое, что у Вас. Только у меня наследование идет от базового класса "::".
Как-то раньше не доходил до той абстракции, что ВСЕ классы являются наследниками статического класса "::".
Например, делаете базовый класс:
{
public:
virtual bool write() const
{
return false;
}
};
от него наследуете Double, Long и прочие классы, включая и Struct (содержащий структуру). Тогда вызов шаблонной Write(T) можно заменить на виртуальный t.write().
Фактически, это то же самое, что у Вас. Только у меня наследование идет от базового класса "::".
Как-то раньше не доходил до той абстракции, что ВСЕ классы являются наследниками статического класса "::".
Ну тут чё-то слишком запутано получается. Зачем оно надо то