আমি একটি ধারণা ইনডেক্সেবল লিখতে চাই যার অর্থ একটি ক্রমটি শুরু হয়েছে / শেষ হয়েছে যে র্যান্ডমএকসেসিটরেটর, বা অপারেটর [] নির্ধারিত এবং অ শূন্য প্রকারের মান প্রদান করে।
সিকোয়েন্স ধারণার জন্য আমি স্ট্রোস্ট্রপের নিবন্ধ থেকে ধারণাগুলি ব্যবহার করেছি এবং এর সাথে বাড়িয়েছি:
template <class T>
concept bool Indexable = Sequence<T> || requires(T t, size_t n) {
{ t[n] } -> NotVoid;
};
এটি বেশিরভাগ ক্ষেত্রে কাজ করে তবে নিম্নলিখিত ক্ষেত্রে ব্যর্থ হয়:
struct Bad {
std::vector<int> nums;
private:
int& operator[](size_t ind) {
return nums[ind];
}
};
static_assert(!Indexable<Bad>, "fail");
কোনও কারণে আমার ধারণা এই বিষয়টি উপেক্ষা করে যে অপারেটর [] প্রাইভেট হিসাবে সংজ্ঞায়িত হয়েছে এবং সত্য ফিরে আসে। আমি কী মিস করছি?
এটি কোনও ব্যবহারিক প্রয়োগ ছাড়াই একাডেমিক অ্যাসাইনমেন্ট।
—
Magom001
উদ্দেশ্যপ্রাপ্ত নয়: "প্রতিস্থাপন প্রক্রিয়ার অংশ হিসাবে অ্যাক্সেস চেকিং করা হয়" eel.is/c++draft/temp#deduct-8.note-1
—
এলএফ
আপনি কোন সংকলক ব্যবহার করছেন? জিসিসি ট্রাঙ্ক বলে মনে হয় কাজ জরিমানা godbolt.org/z/hY6UvY দ্য
—
সেব্রোকম
static_assert
ব্যক্তিগত পাস operator[]
এবং জনসাধারণের জন্য ব্যর্থ।
concept bool
ইঙ্গিত দেয় যে আপনি কনসেপ্টস টিএসের বিরুদ্ধে সংকলন করছেন, সি ++ 20 ধারণাগুলি নয়। দুজনের মধ্যে নিয়ম আলাদা হতে পারে।
Indexable
? যেহেতু এটি একটি অভিন্ন ইন্টারফেসের গ্যারান্টি দেয় না কোডটি ব্যবহার করে এটি এখনও স্থিরভাবে হয়begin(x)[i]
বা এর অস্তিত্বের উপর প্রেরণ করতে হবেx[i]
।