ঠিক আছে, স্বীকার করা সত্যই কঠিন, তবে উত্তরাধিকারী হওয়ার জন্য আমার এই মুহুর্তে প্রবল প্রলোভন রয়েছে std::vector
।
আমার ভেক্টরের জন্য প্রায় 10 টি কাস্টমাইজড অ্যালগরিদম প্রয়োজন এবং আমি তাদের সরাসরি ভেক্টরের সদস্য হতে চাই। তবে স্বাভাবিকভাবেই আমি বাকী std::vector
ইন্টারফেসটিও রাখতে চাই। ঠিক আছে, আইন মেনে চলা নাগরিক হিসাবে আমার প্রথম ধারণাটি ছিল ক্লাসে std::vector
সদস্য হওয়া MyVector
। তবে তখন আমাকে স্ট্যান্ড :: ভেক্টরের ইন্টারফেসের ম্যানুয়ালি পুনঃপ্রবিষ্ট করতে হবে। খুব বেশি টাইপ করতে হবে। এরপরে, আমি ব্যক্তিগত উত্তরাধিকার সম্পর্কে ভেবেছিলাম, যাতে পদ্ধতিগুলি পুনর্নির্মাণের পরিবর্তে আমি using std::vector::member
পাবলিক বিভাগে একগুচ্ছ লিখতে পারি । এটি আসলে খুব ক্লান্তিকর।
এবং আমি এখানে আছি, আমি সত্যিই ভাবি যে আমি কেবল প্রকাশ্যভাবে এর উত্তরাধিকারী হতে পারি std::vector
, তবে ডকুমেন্টেশনে একটি সতর্কতা প্রদান করেছি যে এই শ্রেণিটি বহিরাগতভাবে ব্যবহার করা উচিত নয়। আমি মনে করি বেশিরভাগ বিকাশকারীরা এটি বুঝতে যথেষ্ট পারদর্শী যে এটি যেহেতু বহিরাগতভাবে ব্যবহার করা উচিত নয়।
আমার সিদ্ধান্তটি কি একেবারেই আপত্তিজনক নয়? যদি তাই হয় তবে কেন? আপনি কি এমন বিকল্প সরবরাহ করতে পারেন যার অতিরিক্ত সদস্যরা আসলে সদস্য থাকবেন তবে ভেক্টরের ইন্টারফেসের সমস্তটি পুনরায় টাইপ করা জড়িত না? আমি এটি সন্দেহ করি, তবে আপনি যদি পারেন তবে আমি কেবল খুশি হব।
এছাড়াও, কিছু ইডিয়ট এমন কিছু লিখতে পারে apart
std::vector<int>* p = new MyVector
মাইভেক্টর ব্যবহারে অন্য কোন বাস্তব বিপদ আছে? বাস্তববাদী বলার মাধ্যমে আমি এমন জিনিসগুলিকে বাতিল করে দিই যেমন কোনও ফাংশনটি কল্পনা করে যা ভেক্টরের কাছে পয়েন্টার নেয় ...
ঠিক আছে, আমি আমার কেস বলেছি। আমি পাপ করেছি. এখন আমাকে ক্ষমা করা বা না করা এখন আপনার উপর নির্ভর করে :)
std::vector
এর ইন্টারফেসটি বেশ বিশাল, এবং যখন সি ++ 1x উপস্থিত হবে, তখন এটি ব্যাপকভাবে প্রসারিত হবে। এটি অনেকগুলি টাইপ এবং আরও কয়েক বছরের মধ্যে প্রসারিত। আমি মনে করি এটি কন্টেন্টের পরিবর্তে উত্তরাধিকার বিবেচনা করার একটি ভাল কারণ - যদি কেউ এই ভিত্তি অনুসরণ করে যে এই ফাংশনগুলি সদস্য হওয়া উচিত (যা আমি সন্দেহ করি)। এসটিএল ধারকগুলি থেকে প্রাপ্ত না হওয়ার নিয়মটি হ'ল এগুলি বহুকর্মী নয়। আপনি যদি সেভাবে সেগুলি ব্যবহার না করেন তবে এটি প্রয়োগ হয় না।