কোনও অবজেক্ট অবিচ্ছেদ্য বা না হয় বা শ্রেণির ধরণ কিনা তা জানার কী লাভ?


14

হ্যালো আমি Cppreferences.com এ এরকম অনেক উদাহরণ দেখেছি:

std::is_class<T>
std::is_integral

ইত্যাদি। আমি জানি যে আমি কোডটি চালনা করি উদাহরণস্বরূপ আমি পেয়েছি trueবা false। তবে তাতে কী লাভ? উদাহরণস্বরূপ অবজেক্টটি ক্লাস টাইপের হয় না জেনে?

#include <iostream>
#include <type_traits>

struct A {};
class B {};
enum class C {};

int main()
{
    std::cout << std::boolalpha;
    std::cout << std::is_class<A>::value << '\n';
    std::cout << std::is_class<B>::value << '\n';
    std::cout << std::is_class<C>::value << '\n';
    std::cout << std::is_class<int>::value << '\n';
}

আউটপুট:

true
true
false
false
  • আমি এই ব্যবহার করে একটি বাস্তব উদাহরণস্বরূপ উপর সব অনুসন্ধান করেছেন ( is_class, is_integral, is_arithmetic, ...) কিন্তু সব টিউটোরিয়াল শুধুমাত্র আশাহীন উদাহরণ দেখাতে: শুধুমাত্র trueবা false

  • এই টেম্পলেটগুলি ব্যবহার করে কেউ কি আমাকে একটি ছোট্ট দরকারী উদাহরণ দিয়ে সহায়তা করতে পারেন?


1
একটি সহজ উদাহরণ - std::copy। কি হবে যদি প্রকারের std::copy, "সহজ" হয় একটি অ্যারের মত intবা char? আপনি ব্যবহার করবেন memcpy, তাই না? সুতরাং আপনি কীভাবে বলবেন "যদি টাইপটি সহজ হয়, মেমকি ব্যবহার করুন, অন্যথায়" ধীর "লুপটি ব্যবহার করবেন?
পলম্যাঙ্কেঞ্জি

উত্তর:


17

এটি কনসোলে লেখার জন্য নয়, এটি নিশ্চিতভাবে।

আরও বিস্তৃতভাবে আপনি জিজ্ঞাসা করছেন: ধরণের বৈশিষ্ট্যের বিন্দুটি কী?

উত্তরটি হ'ল টেমপ্লেট রূপক । উদাহরণস্বরূপ, আমি একটি টেম্পলেট বিশেষায়নের তৈরি করতে পারি যা অবিচ্ছেদ্য ধরণের জন্য একটি কাজ করে এবং অন্যটি অ-ইন্টিগ্রাল টাইপের জন্য।

হারুন Bullman হয়েছে বৈশিষ্ট্যগুলো টাইপ করতে একটি সহজ ভূমিকা তারিখে Jacek করে হিসাবে, এখানে

আমার মতে, এই জিনিসগুলির বেশিরভাগ ব্যবহার দুর্দান্ত ব্যাকগ্রাউন্ড যন্ত্রপাতিগুলির অংশ হিসাবে দুর্দান্ত বৈশিষ্ট্য এবং শ্রেণি এবং ইউটিলিটিগুলি (অর্থাত্ত গ্রন্থাগারে) প্রয়োগের মধ্যেই সমাহিত হবে।

আরও পড়া:

সেই প্রথমটিতে রাইটফোর্ডের উত্তর কখন বৈশিষ্ট্য কার্যকর হয় তার দুর্দান্ত উদাহরণ দেয়:

উদাহরণস্বরূপ, এর প্রয়োগ যখন সুস্পষ্ট লুপের পরিবর্তে অভ্যন্তরীণভাবে std::copyব্যবহার করতে পারে std::memcpyযখন পুনরাবৃত্তিগুলি পিওডিগুলিতে পয়েন্টার হয়। এটি SFINAE দিয়ে অর্জন করা যেতে পারে।


সুতরাং আপনার অর্থ উদাহরণস্বরূপ আমি নির্দিষ্ট প্রকারের জন্য টেম্পলেটগুলির কিছু দৃষ্টান্ত অক্ষম করার জন্য এগুলি ব্যবহার করতে পারি উদাহরণস্বরূপ কোনও যুক্তিযুক্ত ফাংশন Power<T>বা শ্রেণি অক্ষম করা যুক্তিসঙ্গত যখন আর্গুমেন্ট প্রকারটি অবিচ্ছেদ্য হয় না তবে বলা যাক std :: স্ট্রিং?
রামি ইয়েন

1
@ রম্যেন, হ্যাঁ, এটিকে SFINAE হিসাবে উল্লেখ করা হয় ।
খ্রিস্ট

7

এটি টেমপ্লেট মেটা প্রোগ্রামিংয়ের জন্য। যখন আপনার কোনও ধারণা নেই যে শেষ-ব্যবহারকারী কোনও ধরণের (গুলি) টেমপ্লেটে প্রবেশ করবে। কখনও কখনও এটি ত্রুটিগুলি জানাতে হয়, কখনও কখনও এটি পাস হওয়া ধরণেরগুলিতে বিশেষজ্ঞ করা হয়। কখনও কখনও এটি একটি সংমিশ্রণ।

সিপ্রেফারেন্স.কমের (উদাহরণস্বরূপ https://en.cppreferences.com/w/cpp/types/is_enum ) এ দেখা উদাহরণগুলি খুব সরলিকৃতের চেয়ে বেশি এবং কেবলমাত্র কীভাবে অ-সাধারণ পদ্ধতিতে বৈশিষ্ট্যটি ব্যবহার করতে হয় তা দেখায়। আপনি প্রায়শই কখনও কখনও সরল (অ-টেম্পলেট ফাংশন বা শ্রেণি) এই বৈশিষ্ট্যগুলি ব্যবহার করবেন না।

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