typename
এবং class
একটি টেমপ্লেট নির্দিষ্ট করার প্রাথমিক ক্ষেত্রে বিনিময়যোগ্য:
template<class T>
class Foo
{
};
এবং
template<typename T>
class Foo
{
};
সমতুল্য
এই বলে যে, সেখানে নির্দিষ্ট ক্ষেত্রে রয়েছে যেখানে typename
এবং এর মধ্যে পার্থক্য রয়েছেclass
।
প্রথমটি নির্ভরশীল প্রকারের ক্ষেত্রে। typename
আপনি যখন নেস্টেড টাইপটিকে উল্লেখ করছেন যা অন্য টেমপ্লেট প্যারামিটারের উপর নির্ভর করে যেমন typedef
এই উদাহরণটিতে:
template<typename param_t>
class Foo
{
typedef typename param_t::baz sub_t;
};
দ্বিতীয়টি আপনি আসলে আপনার প্রশ্নে দেখান, যদিও আপনি এটি বুঝতে পারেন না:
template < template < typename, typename > class Container, typename Type >
কোনও টেম্পলেট টেমপ্লেট নির্দিষ্ট করার সময় , class
কীওয়ার্ডটি উপরের হিসাবে ব্যবহার করা আবশ্যক - এটি এই ক্ষেত্রে এর সাথে বিনিময়যোগ্য নয় (দ্রষ্টব্য: যেহেতু C ++ 17 উভয় কীওয়ার্ডই এই ক্ষেত্রে অনুমোদিত)typename
।
class
স্পষ্টভাবে কোনও টেম্পলেট ইনস্ট্যান্ট করার সময় আপনাকে অবশ্যই ব্যবহার করতে হবে :
template class Foo<int>;
আমি নিশ্চিত যে আমি মিস করেছি এমন অন্যান্য কেসগুলি রয়েছে তবে নীচের অংশটি হ'ল: এই দুটি মূলশব্দ সমতুল্য নয়, এবং এটি এমন কয়েকটি সাধারণ ক্ষেত্রে যেখানে আপনার একটি বা অন্য ব্যবহার করা দরকার।
template <typename T> typename Foo {};
কোনওটিই প্রতিস্থাপন করা যায়নি , কারণ ফু <T> অবশ্যই একটি শ্রেণি।