У меня есть функция которая двигает массивы и я указываю для неё аргументы, я хотел сделать технологию чтобы функция могла автоматически определить тип массива и не нужно было ставить какой это массив, пришла такая идея что может каким-нибудь образом сделать сноску или что такое и вызывать эту сноску и будет происходить самоопределение типа массива. Например
void Sdv(int &mas[][],double &mas1[],double &mas2[][],datetime &mas3[][],int qt)
{
Расчёты
}
Записываем таким образом
void Sdv("сноска на тип" &mas[][],"сноска на тип" &mas1[],"сноска на тип" &mas2[][],"сноска на тип" &mas3[][],int qt)
{
Расчёты
}
не странные, а не имеющие конкретного применения, есть конкретная цель, значит нужна реализация, ну каков вопрос, таков ответ, с массивами сомневаюсь, что так просто будет, с классами можно, примерно так:
template<typename T>
class CData
{
public:
CData() { };
~CData() { };
T arr[];
int Total() { return(ArraySize(arr)); }
void typeof() { Print(typename(T)); }
};
//+------------------------------------------------------------------+voidOnStart()
{
CData<int> *dataint = new CData<int>;
CData<double> *datadouble = new CData<double>;
dataint.typeof();
datadouble.typeof();
delete dataint;
delete datadouble;
}
//+------------------------------------------------------------------+
У меня есть функция которая двигает массивы и я указываю для неё аргументы, я хотел сделать технологию чтобы функция могла автоматически определить тип массива и не нужно было ставить какой это массив, пришла такая идея что может каким-нибудь образом сделать сноску или что такое и вызывать эту сноску и будет происходить самоопределение типа массива. Например
Поэтому я и задаю такие странные вопросы.
Нормальные вопросы. Задавайте и темы создавайте.
Это делается за счет так называемой перегрузки имени функции. Не надо в одной функции определять, нужно написать несколько функций с одинаковыми именами, но с разными наборами параметров. Показано здесь и здесь.
У меня есть функция которая двигает массивы и я указываю для неё аргументы, я хотел сделать технологию чтобы функция могла автоматически определить тип массива и не нужно было ставить какой это массив, пришла такая идея что может каким-нибудь образом сделать сноску или что такое и вызывать эту сноску и будет происходить самоопределение типа массива. Например
Было бы класно если бы вы комментировали что происходит на этих строчках.К примеру
template<typename T> тут понятно объявлен шаблон
void MoveArray(T &array[])что происходит тут. Здесь описывается функция то что она будет делать да или что тут происходит? Она принимает внутрь
себя шаблон, его параметры сколько параметров принимает эта функция 1 параметр? Она принимает массив любого типа указанный
в шаблоне? В зависимости от аргументов функции будет принято количество массивов с которыми она будет работать или будет принят
весь шаблон.
{
Здесь я так понял производятся
расчёты функции которая будет крутить массивы или что-то делать.
}
...
struct MyStruct объявили структуру но внутри всё пусто тело пустое, обычно что-то должно там быть где оно рассчитывается или описание параметров? Я так понял
описание параметров ниже под структурой.
{
};
double doubleArray[];здесь я так понял и происходит самое интересное.
int intArray[];
datetime dtArray[];
MyStruct stArray[];
...
MoveArray(doubleArray);
MoveArray(intArray);
MoveArray(dtArray);
MoveArray(stArray);
Покажите как вызвать функцию в которую будут передоваться параметры и как будут заполнятся аргументы этой функции. Предположим нам нужно вызвать
функцию покажите как это происходит?
Смысл шаблона в том, что не нужно для каждого используемого типа писать свою функцию. Это сделает компилятор, когда обнаружит вызов функции, исходя из типов аргументов, с которыми она вызвана.
Наиболее распространенный пример шаблонных функций - это как раз работа с массивами. Массивы могут иметь различный тип, а реализация действий с ними - одна и та же.
Вот так можно добавить новый элемент к массиву любого типа:
#define ARRAY_RESERVE_SIZE 100//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Добавление нового элемента в массив |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+template<typename T>
bool AddElementToArray(T& arrT[], const T& tElement)
{
int nTotal = ArraySize(arrT);
if (ArrayResize(arrT, nTotal + 1, ARRAY_RESERVE_SIZE) != nTotal + 1)
{
Alert(MQLInfoString(MQL_PROGRAM_NAME), ": error while adding the element to array of ", typename(T), " type.");
returnfalse;
}
arrT[nTotal] = tElement;
returntrue;
}
Вызов для массивов различных типов:
struct MyStruct
{
datetime dtTime;
double fPrice;
};
int intArray[];
double dArray[];
MyStruct stArray[];
int a = 10;
double b = 1.5;
MyStruct stPoint = {D'2018.01.01', 12.0};
if (!AddElementToArray(intArray, a))
return;
if (!AddElementToArray(dArray, b))
return;
if (!AddElementToArray(stArray, stPoint))
return;
Я ниже написал комментарий могли бы вы посмотреть и сказать своё мнение о задумке.
Как-то менее замысловато можно вопрос задать? Ничего не понял.
Я ниже написал что хочу сделать чего добиться вы могли бы посмотреть мою задумку.
При помощи перегрузки можно
У меня есть функция которая двигает массивы и я указываю для неё аргументы, я хотел сделать технологию чтобы функция могла автоматически определить тип массива и не нужно было ставить какой это массив, пришла такая идея что может каким-нибудь образом сделать сноску или что такое и вызывать эту сноску и будет происходить самоопределение типа массива. Например
Поэтому я и задаю такие странные вопросы.
Поэтому я и задаю такие странные вопросы.
не странные, а не имеющие конкретного применения, есть конкретная цель, значит нужна реализация, ну каков вопрос, таков ответ, с массивами сомневаюсь, что так просто будет, с классами можно, примерно так:
дальше экспериментируйте, что и как
У меня есть функция которая двигает массивы и я указываю для неё аргументы, я хотел сделать технологию чтобы функция могла автоматически определить тип массива и не нужно было ставить какой это массив, пришла такая идея что может каким-нибудь образом сделать сноску или что такое и вызывать эту сноску и будет происходить самоопределение типа массива. Например
Поэтому я и задаю такие странные вопросы.
Нормальные вопросы. Задавайте и темы создавайте.
Это делается за счет так называемой перегрузки имени функции. Не надо в одной функции определять, нужно написать несколько функций с одинаковыми именами, но с разными наборами параметров. Показано здесь и здесь.
У меня есть функция которая двигает массивы и я указываю для неё аргументы, я хотел сделать технологию чтобы функция могла автоматически определить тип массива и не нужно было ставить какой это массив, пришла такая идея что может каким-нибудь образом сделать сноску или что такое и вызывать эту сноску и будет происходить самоопределение типа массива. Например
Поэтому я и задаю такие странные вопросы.
Используйте шаблоны:
Используйте шаблоны:
Было бы класно если бы вы комментировали что происходит на этих строчках.К примеру
Было бы класно если бы вы комментировали что происходит на этих строчках.К примеру
Если еще не сталкивались с шаблонами, то можно посмотреть описание вот здесь. Вроде бы достаточно доходчиво написано. И коротко, к тому же.
объявили структуру но внутри всё пусто тело пустое
Просто показал, что массив может быть не только из данных простого типа, но также и из структур.
Покажите как вызвать функцию в которую будут передоваться параметры и как будут заполнятся аргументы этой функции
Вот же примеры вызова:
Смысл шаблона в том, что не нужно для каждого используемого типа писать свою функцию. Это сделает компилятор, когда обнаружит вызов функции, исходя из типов аргументов, с которыми она вызвана.
Может быть так сделать?
Наиболее распространенный пример шаблонных функций - это как раз работа с массивами. Массивы могут иметь различный тип, а реализация действий с ними - одна и та же.
Вот так можно добавить новый элемент к массиву любого типа:
Вызов для массивов различных типов: