আমি কখন এবং কখন সি ++ তে টাইপডেফ ব্যবহার করব সে সম্পর্কে আমি কিছুটা বিভ্রান্ত। আমি মনে করি এটি পাঠযোগ্যতা এবং স্পষ্টতার মধ্যে একটি ভারসাম্যপূর্ণ কাজ।
কোনও টাইপডেফ ছাড়াই এখানে একটি কোড নমুনা রয়েছে:
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
যথেষ্ট ভাল।