স্ট্যান্ড :: কীভাবে কার্যকর হয়?


82

নিম্নলিখিতগুলি কীভাবে কার্যকর করা যায় std::is_function?

template<class T>
struct is_function : std::integral_constant<
    bool,
    !std::is_const<const T>::value && !std::is_reference<T>::value
> {};

( সিপিপি রেফারেন্স থেকে )

আমার কাছে মনে হচ্ছে, intএই সংজ্ঞা অনুসারে একটি হ'ল একটি ফাংশন। আমি কী মিস করছি?


10
!is_constঅংশ সম্পর্কে চিন্তা করুন ।
aschepler

ফাংশন ধরণের কেন কনস্টেন্ট হতে পারে না? এটি কি জঘন্য প্রকারের সাথে সম্পর্কিত?
jtbandes

4
@ জাজব্যান্ডস কারণ এটি ফাংশনগুলি সি ++ এর কয়েকটি জিনিস যা অবজেক্ট নয়।
আয়সান

1
আমি অনুমান করি কারণ এক অর্থে এটি সর্বদা
কনস্ট

আমার মনে হচ্ছে শিরোনামটি বিভ্রান্তিকর। "এটি কীভাবে বৈধ std :: is_function বাস্তবায়ন?" আরও উপযুক্ত বলে মনে হচ্ছে
বলেছেন মনিকা

উত্তর:


73

শর্তগুলি উপস্থিত হওয়ার সাথে সাথে দেখা যাক:
যদি const Tকনস্ট না হয় ( constফাংশনগুলি বাস্তবে না হওয়ায় প্রকৃত ফাংশনের ধরণের ক্ষেত্রে প্রযোজ্য না) এবং Tকোনও রেফারেন্স constনা হয় ( একই কারণে রেফারেন্সগুলিতে প্রযোজ্য না) এটি একটি ফাংশনের ধরণ। int(বা অন্য কোনও নন-ফাংশন-অ-রেফারেন্স টাইপ) মানায় না কারণ is_const<const int>::valueএটি true

মতে সি ++ 17 স্ট্যান্ডার্ড §11.3.5 কার্যাবলী / ধারা 7 : (জোর দেওয়া খনি)

ফাংশন ডিক্লেয়ারারে সিভি-কোয়ালিফায়ার-সিকের প্রভাব ফাংশনের ধরণের উপরে সিভি-যোগ্যতা যুক্ত করার মতো নয়। পরবর্তী ক্ষেত্রে, সিভি-কোয়ালিফায়ারদের উপেক্ষা করা হয়। [দ্রষ্টব্য: সিভি-কোয়ালিফায়ার-সেক রয়েছে এমন একটি ফাংশন টাইপ সিভি-কোয়ালিফাইড টাইপ নয়; কোনও সিভি-যোগ্য ফাংশনের ধরণ নেই। - শেষ নোট] [...]


5
আহ .... আমি এর_একটি অংশের ভিতরে "কনস্ট" নিখোঁজ ছিলাম। এটা বোধগম্য.
রিয়ান কুইন

54

ভাষাতে দুটি ধরণের ধরণের রয়েছে যার কনস্ট-যোগ্যতা থাকতে পারে না : রেফারেন্সের ধরণ এবং ফাংশনের ধরণ। সুতরাং, যদি const Tকোনও কনস্ট-কোয়ালিফাইড টাইপ হতে ব্যর্থ হয় তবে এর অর্থ Tহয় কোনও ফাংশন টাইপ বা কোনও রেফারেন্স টাইপ। আপনি যদি রেফারেন্সের ধরণগুলি বাতিল করতে পারেন তবে কেবলমাত্র ফাংশন প্রকারের সাথে আপনার বাকী রয়েছে।

নোট যে একটা ফাংশন টাইপ এর মত CV-কোয়ালিফায়ার বহন করে যে, int(int) constহয় না একটি const-যোগ্যতাসম্পন্ন প্রকার। এটি একটি "জঘন্য ফাংশন ধরণের" উদাহরণ, যার একমাত্র আসল ব্যবহার পয়েন্টার-থেকে-সদস্য-ফাংশনের ধরণের রচনা বা পচন করা। int(int) constশীর্ষে কনস্ট-কোয়ালিফিকেশন যুক্ত করে টাইপটি পাওয়া যায় না int(int)। বরং constপ্রয়োগিত বস্তুর প্যারামিটারে প্রয়োগ হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.