Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1096

 

Como faço para criar um ponteiro paraum método de classe?

class qer{
public:
int _int(int q){...}
int int_(int q){...}
};qer *_qer

Você precisa criar um ponteiro para uma função_int eint_.

Em mql4 algo é descrito sobre ponteiros e aulas aqui(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer), mas não há comentários, não está claro para que serve e o que faz. Sem aulas é fácil declarar um ponteiro usando typedef, mas eu quero entender como funciona nas aulas.

Tentar aplicar typedef a uma função de classe recebe um ponteiro de erro a este tipo de função ainda não é suportado, tentou as instruções acima mas como não é mostrado para o que e sem comentários, nada funciona.
 
Seric29:

Como faço para criar um ponteiro paraum método de classe?

Você precisa criar um ponteiro para uma função_int eint_.

Em mql4 algo é descrito sobre ponteiros e aulas aqui(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer), mas não há comentários, não está claro para que serve e o que faz. Sem aulas é fácil declarar um ponteiro usando typedef, mas eu gostaria de entender como funciona nas aulas.

Ao tentar aplicar o typedef a uma função de classe, o ponteiro de erro a este tipo de função ainda não é suportado, tentou as instruções acima, mas como não foi mostrado para que serve e sem comentários, nada funciona.
Não pode
 
 
Errado. Uma pessoa precisa de um ponteiro para um método de uma classe, não de uma conversão de descendentes.
 
Vladimir Simakov:
Errado. Uma pessoa precisa de um ponteiro para um método de uma classe, não de um elenco para um herdeiro.

não há outro estilo de procedimento sem controle de acesso ou OOP com controle de acesso e tipo

ok, não importa, o autor sempre tem problemas altamente especializados ;)

 
Seric29:

Como faço para criar um ponteiro paraum método de classe?

Você precisa criar um ponteiro para uma função_int eint_.

Em mql4 algo é descrito sobre ponteiros e aulas aqui(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer), mas não há comentários, não está claro para que serve e o que faz. Sem aulas é fácil declarar um ponteiro usando o typedef, mas eu gostaria de entender como funciona nas aulas.

Tentar aplicar typedef a uma função de classe recebe um ponteiro de erro a este tipo de função ainda não é suportado, tentou as instruções acima mas como não é mostrado para o que e sem comentários, nada funciona.

Só me pergunto: como você planeja usá-lo?

 

Por que você precisa salvar um ponteiro para toda a classe, aqui está um exemplohttps://docs.mql4.com/ru/basis/types/this

//+------------------------------------------------------------------+
//| возвращает собственный указатель                                 |
//+------------------------------------------------------------------+
CDemoClass *CDemoClass::getDemoClass(void)
  {
   return(GetPointer(this));
  }

O que fazer com ele depois?

 
Vladimir Simakov:
Você não pode

A questão surge: se você não pode fazer isso, por que você escreve funções em uma classe que assume funções? Além disso, às vezes é preciso implementar uma interface e às vezes não se sabe qual função chamar.

 
Seric29:

A pergunta surge: se você não pode fazer isso, por que você escreve funções em uma classe que assume funções? Além disso, às vezes é preciso implementar uma interface e às vezes não se sabe qual função chamar.

Como isso funciona?

 
Vladimir Simakov:

Como funciona?

Um ponteiro para uma função é passado como um parâmetro. Vejo que ninguém descobriu como fazer isso com as aulas. Também ainda não está claro para mim por que um ponteiro para uma classe deve ser devolvido.

Aqui estão amostras interessantes, mas não estão relacionadas à minha pergunta.

#property strict

class CStrategy;
typedef bool (*SignalFn)(CStrategy*);

// Global function definitions
bool IsBuySignal(CStrategy*ptr) { return ptr.IsBuySignal(); }
bool IsSellSignal(CStrategy*ptr) { return ptr.IsSellSignal(); }

// Create an abstract base class
class CStrategy
{
public:
        virtual bool IsBuySignal(void)=0;
        virtual bool IsSellSignal(void)=0;
};

// Derived class
class Strat1 : public CStrategy
{
public:
        // Implement the required functions
        bool IsBuySignal(void) { return true;}
        bool IsSellSignal(void) { return true;}
};

void OnStart()
{
        // instantiate a class
        Strat1 strat1;

        // Global functions work as expected
        SignalFn ptrSignalFn;                           // pointer to a signal function
        ptrSignalFn = IsBuySignal;
        if ( ptrSignalFn(&strat1) ) { Print("Is Buy"); }
}
Também vi algo semelhante no guia, mas já fechei estes locais, pois minhas mãos doem e tenho trabalho a fazer.
Razão: