Errori, bug, domande - pagina 1873

 
Stanislav Korotky:
Nelle ultime build, avete risolto il bug per cui cambiare e ricompilare il codice EA non viene rilevato dal tester? Devo chiudere e riaprire il terminale per la nuova versione di ex5 per iniziare i test. Altrimenti, viene testata la vecchia variante.
Modifico l'Expert Advisor e sia CTRL+F5, sia direttamente nello Strategy Tester vedo il risultato adeguato.
 
fxsaber:
Modifico l'Expert Advisor e sia attraverso CTRL+F5 che direttamente nel tester vedo risultati adeguati.
Ctrl+F5 è il debug, giusto? Il mio problema non è il debug, ma l'esecuzione di un semplice test.
 
Stanislav Korotky:
Ctrl+F5 è il debug, giusto? Il mio problema non è il debug, ma l'esecuzione di un semplice test.
Senza visuals corro dopo le modifiche - bene.
 
fxsaber:

Come si crea un oggetto di classe nascosto con un costruttore chiuso?

Ecco come arrivano le fughe di notizie.

Non è chiaro come chiamare un distruttore in questa situazione. Singleton non lo è.

Un oggetto di classe con un costruttore chiuso può essere creato solo usando una speciale funzione statica di quella classe.

Anche se il compilatore attualmente non impreca sul codice che hai citato, questo sarà sicuramente risolto in futuro.

Potete usare un puntatore intelligente per chiamare il distruttore.

Il distruttore deve essere aperto.

 
Koldun Zloy:

Un oggetto di una classe con un costruttore chiuso può essere creato solo usando una speciale funzione statica di quella classe.

Anche se il compilatore attualmente non impreca sul codice che hai citato, questo sarà sicuramente risolto in futuro.

Il metodo statico proposto in questo caso sarà una specie di auto-inganno, perché sarà un costruttore in sostanza. Dovrete chiamarlo esplicitamente.

Potete usare un puntatore intelligente per chiamare il distruttore.

Il distruttore deve essere aperto.

Cos'è un puntatore intelligente?
 

Se siete sicuri che il costruttore debba essere privato, non c'è altro modo.

Un puntatore intelligente è un oggetto che contiene un puntatore semplice e assicura che venga rimosso in tempo.

class MyClass
{
public:
   MyClass();
};

struct MyClassPtr
{
   MyClass* pMyClass;

   MyClassPtr( MyClass* myClass ) : pMyClass( myClass )
   {
   }
   ~MyClassPtr()
   {
      delete pMyClass;
   }
};

Questa è l'opzione più semplice.

Ci sono anche puntatori intelligenti più complessi.

È scritto molto bene su di loro in questo libro: https://rsdn.org/res/book/cpp/cpp_real_programmers.xml

C++ : библиотека программиста
  • rsdn.org
Глава 5. Умные указатели Глава 6. Ведущие указатели и дескрипторы Глава 7. Грани и другие мудрые указатели Глава 8. Коллекции, курсоры, итераторы Глава 9. Транзакции и гениальные указатели
 

cosa manca per rendere il codice compilabile:

class CMyClass
  {
public:
   void* core;
   CMyClass(void) : core(NULL) { }
   template<typename T>
   void Create(T* a_ptr) {
      core = dynamic_cast<T *> (a_ptr);
   }
  };

class CCore
  {
public:
   int var;
   CCore(void) : var(3) { }
  };


int OnInit() {
   CCore *_point_1 = new CCore();
   CMyClass _obj;
   _obj.Create(_point_1);
   int _val = _obj.core.var;
   
   delete _point_1;
//---
   return INIT_SUCCEEDED;
}

questa variante scrive 'var' - struct member undefined

PS. ha ottenuto l'errore ))

int _val = dynamic_cast <CCore *>(_obj.core).var;


 
void* da quale build della lingua?
 
fxsaber:
void* da quale build della lingua?

è allora che sono apparse le interfacce
 
Sergey Dzyublik:

quando sono arrivate le interfacce.
Grazie. Ho avuto subito l'errore, però
struct PTR
{
  void* Ptr; // internal error #40
};