Saya agak bingung tentang apakah dan kapan saya harus menggunakan typedef di C ++. Saya merasa ini adalah tindakan penyeimbang antara keterbacaan dan kejelasan.
Berikut ini contoh kode tanpa salah ketik:
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;
...
}
IMO sangat jelek. Jadi saya akan menambahkan beberapa typedefs di dalam fungsi agar terlihat lebih bagus:
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;
...
}
Kode ini masih agak canggung, tetapi saya menyingkirkan sebagian besar bahan mimpi buruk. Tapi masih ada iterator vektor int, varian ini menghilangkannya:
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;
...
}
Ini terlihat bersih, tetapi apakah masih dapat dibaca?
Kapan saya harus menggunakan typedef? Begitu saya memiliki jenis mimpi buruk? Begitu itu terjadi lebih dari satu kali? Di mana saya harus meletakkannya? Haruskah saya menggunakannya dalam tanda tangan fungsi atau menyimpannya dalam implementasi?
typedef Input_iterator std::vector<int>::const_iterator;
mundur
#define
tidak cukup baik.