aynı sınıf A, aşağıdaki iki sürümü varsayalım:Hangisi daha iyi: açık mı yoksa anlamsız get()?
şekli berraklık, verimlilik ve uzayabilirlik açısından 1
class A
{
public:
enum class Retrievable { Integer, String };
A(): m_integer(123), m_string("string") {}
~A() {}
void* get(const Retrievable r)
{
switch (r)
{
case Retrievable::Integer:
return static_cast<void*>(&m_integer);
case Retrievable::String:
return static_cast<void*>(&m_string);
default:
throw;
}
}
private:
int m_integer;
std::string m_string;
};
Versiyon 2
class A
{
public:
A(): m_integer(123), m_string("string") {}
~A() {}
int getInteger() { return m_integer; }
std::string getString() { return m_string; }
private:
int m_integer;
std::string m_string;
};
, bu iki paradigmaların olan - tek bir tipsiz get() işlevi veya ayrı get() işlevleri - daha mı iyidir?
İkincisi. Birincisinde, hem 'r' hem de hataya yatkın ve gereksiz olan dönüş türünü belirtmeniz gerekir. Bunu 'sanal' yapmak da mümkün değil. Birincisi, belirtilen türü bir şekilde kullandığınızda, örn. dynamic_cast' için ama bu örnekte yok. – StenSoft
Derleme olmayan kod, koddan daha hızlıdır. Sürüm 1 derlenmiyor, bu yüzden açıkça daha iyi bir performans. Bir dakika ne? Seçenek 1 veya seçenek 2'nin daha iyi olup olmadığını öğrenmek isterseniz, lütfen seçeneklerinizi açıklayan * gerçek çalışma kodunu * belirtin. Yukarıdakiler herhangi bir anlam ifade etmediği için - derlemeyi yapmak için seçeneklerden birini temelde yeniden yazmak zorundayım ve aynı kodu aynı şekilde yeniden yazıp yazmayacağımı kim bilir. – Yakk
@Yakk Dürüstçe, henüz bir çalışma örneği oluşturabileceğim kodlamada bir noktaya gelmedim. Ancak, diğer nedenlerle ikinci yöntemi kullanarak sona erdi. Bu, cevabı bildiğim teorik bir alıştırmaydı. Eminim derlemek için böyle bir şey alabilirim. Soru, arkasındaki teori hakkındaydı, özellikle ne yazdığımda değil (en azından kısmen yanlış olduğunu düşündüm). – Frostfyre