मैं थोड़ा उलझन में हूँ कि क्या और कब मुझे C ++ में टाइपडिफ का उपयोग करना चाहिए। मुझे लगता है कि यह पठनीयता और स्पष्टता के बीच संतुलन का कार्य है।
यहां पर बिना किसी टाइपराइफ के एक कोड सैंपल दिया गया है:
int sum(std::vector<int>::const_iterator first,
std::vector<int>::const_iterator last)
{
static std::map<std::tuple<std::vector<int>::const_iterator,
std::vector<int>::const_iterator>,
int> lookup_table;
std::map<std::tuple<std::vector<int>::const_iterator,
std::vector<int>::const_iterator>, int>::iterator lookup_it =
lookup_table.find(lookup_key);
if (lookup_it != lookup_table.end())
return lookup_it->second;
...
}
बहुत बदसूरत आईएमओ। तो मैं इसे टाइप करने के लिए फंक्शन के भीतर कुछ टाइपराइफ जोड़ूंगा ताकि इसे अच्छे से देखा जा सके:
int sum(std::vector<int>::const_iterator first,
std::vector<int>::const_iterator last)
{
typedef std::tuple<std::vector<int>::const_iterator,
std::vector<int>::const_iterator> Lookup_key;
typedef std::map<Lookup_key, int> Lookup_table;
static Lookup_table lookup_table;
Lookup_table::iterator lookup_it = lookup_table.find(lookup_key);
if (lookup_it != lookup_table.end())
return lookup_it->second;
...
}
कोड अभी भी थोड़ा अनाड़ी है, लेकिन मुझे सबसे अधिक बुरे सपने से छुटकारा मिलता है। लेकिन अभी भी सदिश वेक्टर पुनरावृत्तियाँ हैं, इस संस्करण से छुटकारा मिल जाता है:
typedef std::vector<int>::const_iterator Input_iterator;
int sum(Input_iterator first, Input_iterator last)
{
typedef std::tuple<Input_iterator, Input_iterator> Lookup_key;
typedef std::map<Lookup_key, int> Lookup_table;
static Lookup_table lookup_table;
Lookup_table::iterator lookup_it = lookup_table.find(lookup_key);
if (lookup_it != lookup_table.end())
return lookup_it->second;
...
}
यह साफ दिखता है, लेकिन क्या यह अभी भी पठनीय है?
मुझे एक टंकण का उपयोग कब करना चाहिए? जैसे ही मेरे पास एक बुरा सपना है? जैसे ही यह एक से अधिक बार होता है? मैं उन्हें कहां रखूं? क्या मुझे उन्हें फ़ंक्शन हस्ताक्षरों में उपयोग करना चाहिए या उन्हें कार्यान्वयन में रखना चाहिए?
typedef Input_iterator std::vector<int>::const_iterator;
बैकवर्ड है
#define
बहुत अच्छा हो