এই ম্যাক্রোটি কয়েকটি গ্লোবাল শিরোনামে বা আরও ভাল সংকলক কমান্ড লাইন প্যারামিটার হিসাবে সংজ্ঞায়িত করা যেতে পারে:
#define me (*this)
এবং কিছু ব্যবহারের উদাহরণ:
some_header.h:
inline void Update()
{
/* ... */
}
main.cpp:
#include "some_header.h"
class A {
public:
void SetX(int x)
{
me.x = x;
me.Update();
}
void SomeOtherFunction()
{
::Update();
}
/*
100 or more lines
...
*/
void Update()
{
// ...
}
int x;
};
সুতরাং কোনও শ্রেণি পদ্ধতিতে যখন আমি কোনও শ্রেণীর সদস্য অ্যাক্সেস করি তখন আমি সর্বদা ব্যবহার করি me
এবং কোনও বিশ্বব্যাপী শনাক্তকারী অ্যাক্সেস করার সময় আমি সর্বদা ব্যবহার করি ::
। এটি এমন পাঠককে দেয় যা কোডের সাথে পরিচিত নয় (সম্ভবত কয়েক মাস পরে আমি নিজেই) অন্য কোথাও দেখার প্রয়োজন ছাড়াই কী অ্যাক্সেস করা হয় তার স্থানীয়করণ তথ্য। আমি সংজ্ঞা দিতে চাই me
কারণ আমি this->
কোথাও খুব শব্দ এবং কুরুচিপূর্ণ ব্যবহার করতে পাই । তবে #define me (*this)
একটি ভাল সি ++ অনুশীলন হিসাবে বিবেচনা করা যেতে পারে? me
ম্যাক্রোর সাথে কিছু ব্যবহারিক সমস্যাযুক্ত পয়েন্ট রয়েছে ? এবং আপনি যদি সি ++ প্রোগ্রামার হিসাবে me
ম্যাক্রো ব্যবহার করে কিছু কোডের পাঠক হয়ে থাকেন তবে আপনি এটি পছন্দ করবেন কি না?
সম্পাদনা করুন: কারণ অনেকে বিতর্ক যুক্তি ব্যবহার করে সুনির্দিষ্টভাবে বিতর্ক করে না me
, তবে জেনারালি কনট্রাস্ট এটিকে স্পষ্ট করে দেয়। আমি মনে করি এটি "স্পষ্টতই এটিকে সর্বত্র স্পষ্ট" করার সুবিধা কী তা পরিষ্কার নয়।
"এটিকে সর্বত্র স্পষ্ট করে" এর সুবিধা কী?
- কোডটির পাঠক হিসাবে আপনার কাছে যা অ্যাক্সেস করা হয়েছে তা নিশ্চিত এবং আপনি যাচাই করার চেয়ে বিভিন্ন বিষয়গুলিতে মনোনিবেশ করতে পারেন - কিছু দূরবর্তী কোডে - এটি যা অ্যাক্সেস করে বলে মনে হয় তা সত্যিই অ্যাক্সেস করা যায়।
- আপনি সুনির্দিষ্টভাবে অনুসন্ধানের ফাংশনটি ব্যবহার করতে পারেন। অনুসন্ধান "
this->x
" আপনাকে কেবল অনুসন্ধান "x
" এর চেয়ে বেশি ফলাফল দিতে পারে - আপনি যখন কোনও সদস্যকে মুছতে বা পুনরায় নামকরণ করছেন, সংকলক নির্ভরযোগ্যতার সাথে আপনাকে এই স্থানে কোথায় ব্যবহার করা হবে তা অবহিত করে। (কিছু বিশ্বব্যাপী ফাংশনটির একই নাম থাকতে পারে এবং আপনি যদি এটিকে স্পষ্টভাবে ব্যবহার না করেন তবে ত্রুটি পরিচয় করিয়ে দেওয়ার সুযোগ উপস্থিত থাকতে পারে)।
- আপনি যখন কোডটি রিফ্যাক্ট করছেন এবং সদস্য থেকে অ-সদস্য ফাংশনটি তৈরি করেন (আরও ভাল এনক্যাপসুলেশন করতে পারেন) এটি আপনাকে প্রদর্শিত হবে যা আপনাকে সম্পাদন করতে হবে এবং অ-সদস্য ফাংশন প্যারামিটার হিসাবে দেওয়া ক্লাসের উদাহরণ হিসাবে আপনি সহজেই এটিকে প্রতিস্থাপন করতে পারেন When
- সাধারণত আপনি যখন কোড পরিবর্তন করছেন তখন আপনি এটিকে স্পষ্টভাবে ব্যবহার না করার চেয়ে ত্রুটিগুলির আরও বেশি সম্ভাবনা রয়েছে যখন আপনি সর্বত্র এটি পরিষ্কার ব্যবহার করছেন।
- স্পষ্টত এটি পরিষ্কার "এম_" এর চেয়ে কম গোলমাল যখন আপনি বাইরে থেকে সদস্যকে পৌঁছে দিচ্ছেন (
object.member
বনামobject.m_member
) (এই কাজটি দেখার জন্য @ কাজিকে ধন্যবাদ) - সুস্পষ্টভাবে এটি সমস্ত সদস্যের জন্য সর্বজনীন সমস্যার সমাধান করে - গুণাবলী এবং পদ্ধতিগুলি, যখন "m_" বা অন্যান্য উপসর্গ কেবলমাত্র বৈশিষ্ট্যের জন্য ব্যবহারযোগ্য able
আমি এই তালিকাটি পোলিশ করতে এবং প্রসারিত করতে চাই, যদি আপনি অন্যান্য সুবিধাগুলি সম্পর্কে জানেন এবং আমাকে যেকোন জায়গায় স্পষ্ট করার জন্য ক্ষেত্রে ব্যবহার করতে চান ।
#define self (*this)
? এমনকি আপনি উভয় ম্যাক্রো মিশ্রিত করতে পারেন এবং ভিবি এবং অন্য পাইথনের অনুকরণকারী কিছু ফাইল রাখতে পারেন। :)
#include "vb.h"
, #Include pascal.h
, অথবা #include FOTRAN.h
এবং আপনার কোডে এটি জমা স্পর্শ পাশে ব্যক্তি আছে TDWTF ।
me_x
।