Bir C++ sınıfı işlevinin bir takma adını yazmanın basit bir yolu olup olmadığını merak ediyordum. Bazı list
konteyner nesne varsa Örneğin, mantıksal fonksiyonC++ sınıf işlev takma adları
int list::length() { return len; }
olurdu Ama programcılar kullanabileceği başka mantıksal takma yerine tam hem fonksiyonlarını yazma, Yani
int list::size() { return len; }
olabilir vücut, list::size()
list::length()
bir takma yapmak için herhangi bir yolu var, böylece derlenmiş, ancak aynı işlevi başvuruyor bir çoğaltma değil mi?
Bunu, #define
ile yapabileceğinizi okudum, ancak tamamen kapsam dışı bir yerde (yani 'boyut' değişkeni) başka kod adları ile herhangi bir karışıklığa neden olmak istemiyorum.
Ayrıca, işlev işaretleyicilerinin bunu düzeltebildiğini de okudum, ancak bu tam olarak bir takma ad değildir (ayrıştırma işlemini uygulamak zorunda olduğu için), ne de işaretçiye bir bildirim verilebilir, bu da ona kafa karıştırıcı bir yardım hattı verir. Kullanıcılar (Ben düşünürdüm), artı başka bir nesne içinde kodumu iç içe gerekiyorsa karışıklık (kapsamı ayarlamak zorundayım). Herhangi sıkı 'takma adıyla' sözdizimi c yoktur,
inline int list::length() { return len; }
inline int list::size() { return length(); }
Ya ++: my tahminlerin
biri aşağıdakiler en optimize derleyici tarafından doğrudan işlev takma adı olarak alınacaktır edilir? (Bulamadım - emin değildim)
Peki, bunu yapmanın en etkili yolu ne olurdu?
DÜZENLEME: Soruyu sadece bir merakım olduğu için bu sorunun cevabını almak için kabul ettim. İyi bilgiye sahip herkes, lütfen yorum veya cevap ekleyin, ve hatta cevabımı bile değiştirebilirim.
C++ ile Aliasing, genellikle işaretçiler gibi çalışan ve dereferencing gereksinimini ekleyen başvurular tarafından yapılır. – imreal
Bitiş kodunuz, her iki işlev için de doğruysa, herhangi bir modern derleyici tarafından aynı montajı üretmelidir. – chris
İyi soru. Varsayılan ve silinmiş işlevlere izin vererek, C++ 11'de bir adım atıldığını düşünüyorum. Eğer int foo() = delete' tamam ise, neden int foo() = int foo_default() 'tam olarak sunmanızın nedenleri için uygun olamaz? Belki de bir sonraki standartta :) Bildiğim kadarıyla şu anda vücuttaki diğer func'lara açıkça başvurmaktan daha iyi bir yol yoktur. – SomeWittyUsername