Yazma hakkında soru - sayfa 3

 
Ilya Malev :

Muhtemelen derleme aşamasında bir şablon uyuşmazlığı hatası oluşturulmalıdır.


Ancak bir dizi nesnesinin olduğu bir durumda

Böyle bir hata oluşmamalıdır, çünkü ilk durumda, Array[int] çağrısı, = işleminin sol parametresi olarak kullanılır ve bir çift değişken değildir ve ikinci durumda, sağdaki gibi ve sol parametre, double türünde bir değişkendir.

Duymazsınız, hiçbir şey yapmamalıdır - türe göre aşırı yükleme yasaktır ve bu açıkça C++ standardında yazılmıştır (ve C++ benzeri - muhtemelen de):

Certain function declarations cannot be overloaded:

- Function declarations that differ only in the return type, the exception specification ( 18.4 ), or both
cannot be overloaded.

Muhtemel sebep yukarıda belirtilmiştir. Yani operatörleriniz[] geçersiz.

 
pavlick_ :

Duymazsınız, hiçbir şey yapmamalıdır - türe göre aşırı yükleme yasaktır ve bu açıkça C++ standardında yazılmıştır:

Muhtemel sebep yukarıda belirtilmiştir. Yani operatörleriniz[] geçersiz.

Size standart hakkında değil, sağduyuya dayalı mantık hakkında cevap verdim. "Muhtemel" bir neden tanımınız argümanımı geçersiz kılmaz. Bağlamdan açıkça tanımlanan belirli bir türe döküm işlemi aşırı yüklendiğinden, yazma işlemini (örtük dahil) aşırı yükleme olasılığı bahsettiğiniz standartla çelişmez.

Belki kendimi çok net ifade edemedim ama bu açıklamadan sonra umarım daha anlaşılır olmuştur.


not Elbette, hayali kodum standarda aykırı. Ancak gerçekten deşifre etmeniz gerekiyorsa (sorunun nasıl daha doğru formüle edileceği konusu sırasında kendim için kendim çözdüğümden beri), kod şöyle görünmelidir:

 class Array{

public :

Array * operator [] ( int i){ id = i; return GetPointer ( this ); }

double operator double (){ return data[i]; }

Array * operator =( double d){ data[id]=d; return GetPointer ( this ); }

private :

double data[ 10 ];

int id;

};



int OnStart (){

  Array array;

   double d= 123.456 ;

  array[ 5 ]=d;

  d=array[ 5 ];

}
 
Bir işleç türü () tanıtmaktan yanaysanız, harika. Artılardan gelen girinti için, o zaman belirli bir sorunu çözmek için (geri dönüş türüne göre aşırı yüklemeye izin vermek) karşıyım (ki bu kesinlikle farklı ve daha güzel bir şekilde çözülebilir - bir şekilde asla ilkinde olduğu gibi saptırılmadım) İleti).
 
pavlick_ :
Bir işleç türü () tanıtmaktan yanaysanız, harika. Artılardan gelen girinti için, o zaman belirli bir sorunu çözmek için (geri dönüş türüne göre aşırı yüklemeye izin vermek) karşıyım (ki bu kesinlikle farklı ve daha güzel bir şekilde çözülebilir - bir şekilde asla ilkinde olduğu gibi saptırılmadım) İleti).

Evet. sonuç olarak, yazma operatörünün tanıtımı içindir. Şubenin ilk gönderisinde belirlediğim sorunu tam olarak çözdüğü için, yalnızca daha "geleneksel" (standartlara uygun ve genel olarak muhtemelen daha doğru) bir şekilde.

 
Ilya Malev :

not Elbette, verdiğim hayali kodum standartla çelişiyor.

Neden çelişiyor, profesyonellerde oldukça geçerli. Ve µl'de dock yoktur.
 
pavlick_ :
Neden çelişiyor, profesyonellerde oldukça geçerli. Ve µl'de dock yoktur.

Çünkü başlangıçta farklı bir dönüş tipine sahip iki özdeş operatör[] işlevi vardı (bunu ikinci versiyonda düzelttim). Bu, standart tarafından yasaklanmıştır. Ve türleri yayınlamak yasak değil (örtük olarak dahil), henüz onları uygulamayı başaramadılar. Mql5'in hızlı gelişimi göz önüne alındığında, er ya da geç uygulanacağına eminim. Hele ki forumda benden başka biri buna dikkat çekerse...

 
Ilya Malev :

Çünkü farklı dönüş türlerine sahip iki özdeş operatör[] işlevi vardır. Bu, standart tarafından yasaklanmıştır. Ve türleri yayınlamak yasak değil (örtük olarak dahil), henüz onları uygulamayı başaramadılar. Mql5'in hızlı gelişimi göz önüne alındığında, er ya da geç uygulanacağına eminim. Hele ki forumda benden başka biri buna dikkat çekerse...

Son koddan bahsediyorum - bu normal.

 
pavlick_ :

Son koddan bahsediyorum - bu normal.

Normaldir, ancak henüz mql5'te çalışmıyor. mql5'te yenilikleri takip edip umut edeceğiz. Kullanıcı tanımlı bir türle sıradan bir diziyle aynı şekilde çalışamamasından dolayı, bir dizi nesnesinin yeterli bir şekilde uygulanmasının imkansızlığı, uzun süredir kişisel olarak beni rahatsız ediyor. Kendi dizinizi yaratıyorsunuz ve en baştan hatalı olduğu ortaya çıkıyor, yerleşik olanlarla aynı kullanılabilirliğe sahip değil.

 
Ilya Malev :

Normaldir, ancak henüz mql5'te çalışmıyor. mql5'te yenilikleri takip edip umut edeceğiz. Kullanıcı tanımlı bir türle sıradan bir diziyle aynı şekilde çalışamamasından dolayı, bir dizi nesnesinin yeterli bir şekilde uygulanmasının imkansızlığı, uzun süredir kişisel olarak beni rahatsız ediyor. Kendi dizinizi yaratıyorsunuz ve en baştan hatalı olduğu ortaya çıkıyor, yerleşik olanlarla aynı kullanılabilirliğe sahip değil.

Eh, büyük mucizeler beklemiyorum, dil artık pek geliştirilmiyor, bir cast operatörü ekleyeceklerinden şüpheliyim. Beni asıl rahatsız eden, bunu yapmanın imkansızlığı:

 class Q {};

Q q;
// что то делаем и решаем переинициализировать q
q = Q();   // ошибка, нужно извратиться:

Q temp;
q = temp;

ama konuşmak gereksiz bence.

 
pavlick_ :

Eh, büyük mucizeler beklemiyorum, dil artık pek geliştirilmiyor, bir cast operatörü ekleyeceklerinden şüpheliyim. Beni asıl rahatsız eden, bunu yapmanın imkansızlığı:

ama konuşmak gereksiz bence.

Sorunun ne olduğu çok açık değil. Nesnenin başlatılmasını Init() türünde ayrı bir yönteme, hatta belki sanal bir yönteme taşımak mümkün değil mi?