হেডার ফাইলটি বিবেচনা করুন:
class T
{
private:
int const ID;
public:
explicit T(int const ID_) noexcept : ID(ID_) {}
int GetID() const noexcept { return ID; }
};
বা, বিকল্পভাবে:
class T
{
private:
int const ID;
public:
explicit T(int const ID_) noexcept;
int GetID() const noexcept;
};
inline T::T(int const ID_) noexcept : ID(ID_) {}
inline int T::GetID() const noexcept { return ID; }
প্রাক-মডিউলগুলির বিশ্বে, এই শিরোনামগুলি ওডিআর লঙ্ঘন ছাড়াই পাঠ্যগতভাবে একাধিক টিউতে অন্তর্ভুক্ত থাকতে পারে। তদ্ব্যতীত, জড়িত সদস্য ফাংশনগুলি তুলনামূলকভাবে ছোট হওয়ায় সংকলক সম্ভবত "ইনলাইন" (ব্যবহার করার সময় ফাংশন কলগুলি এড়ানোর জন্য) করবে, বা এমনকি Tপুরোপুরি কিছু উদাহরণ অপ্টিমাইজ করবে ।
সি ++ 20 সমাপ্ত হয়েছিল এমন সভায় সাম্প্রতিক একটি প্রতিবেদনে আমি নীচের বিবৃতিটি পড়তে পারি:
আমরা
inlineমডিউল ইন্টারফেসগুলির অর্থটি পরিষ্কার করে দিয়েছি : উদ্দেশ্যটি হ'ল যে ফাংশনগুলির সংস্থাগুলি স্পষ্টভাবে ঘোষণা করাinlineহয় না তারা মডিউলটির এবিআইয়ের অংশ হয় না, এমনকি যদি সেই ফাংশন সংস্থাগুলি মডিউল ইন্টারফেসে প্রদর্শিত হয়। মডিউল লেখকদের তাদের এবিআই-র উপর আরও নিয়ন্ত্রণ দেওয়ার জন্য, মডিউল ইন্টারফেসগুলিতে শ্রেণিবদ্ধ সংস্থাগুলিতে সংজ্ঞায়িত সদস্য ফাংশনগুলি আর স্পষ্টভাবে থাকে নাinline।
আমি নিশ্চিত নই যে আমি ভুল করি না। এর অর্থ কি, কোনও মডিউল বিশ্বে, সংকলকটির জন্য ফাংশন কলগুলি অপ্টিমাইজ করতে সক্ষম হবার জন্য আমাদের তাদের এ্যানোটেট করতে হবে inlineএমনকি তারা শ্রেণি-সংজ্ঞায়িত হলেও?
যদি তা হয় তবে নীচের মডিউল ইন্টারফেসটি কি উপরের শিরোনামগুলির সমতুল্য হবে?
export module M;
export
class T
{
private:
int const ID;
public:
inline explicit T(int const ID_) noexcept : ID(ID_) {}
inline int GetID() const noexcept { return ID; }
};
যদিও মডিউল সমর্থন সহ আমার এখনও একটি সংকলক নেই inline, ভবিষ্যতের রিফ্যাক্টরিংটি কমিয়ে আনার জন্য, আমি যখন উপযুক্ত তখন এটির মতো ব্যবহার শুরু করতে চাই ।
inlineকীওয়ার্ড ব্যতীত কোনও মডিউলে কোনও ফাংশন সংকলক দ্বারা কখনই ইনলাইন করা যাবে না, সঠিক?