কনসেপ্ট টিএস চেক ব্যক্তিগত অ্যাক্সেস সংশোধকটিকে উপেক্ষা করে


10

আমি একটি ধারণা ইনডেক্সেবল লিখতে চাই যার অর্থ একটি ক্রমটি শুরু হয়েছে / শেষ হয়েছে যে র্যান্ডমএকসেসিটরেটর, বা অপারেটর [] নির্ধারিত এবং অ শূন্য প্রকারের মান প্রদান করে।

সিকোয়েন্স ধারণার জন্য আমি স্ট্রোস্ট্রপের নিবন্ধ থেকে ধারণাগুলি ব্যবহার করেছি এবং এর সাথে বাড়িয়েছি:

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");

কোনও কারণে আমার ধারণা এই বিষয়টি উপেক্ষা করে যে অপারেটর [] প্রাইভেট হিসাবে সংজ্ঞায়িত হয়েছে এবং সত্য ফিরে আসে। আমি কী মিস করছি?


1
আগ্রহের বাইরে, আপনি কীভাবে আপনার ধারণাটি ব্যবহারে ব্যবহার করবেন Indexable? যেহেতু এটি একটি অভিন্ন ইন্টারফেসের গ্যারান্টি দেয় না কোডটি ব্যবহার করে এটি এখনও স্থিরভাবে হয় begin(x)[i]বা এর অস্তিত্বের উপর প্রেরণ করতে হবে x[i]
কনরাড রুডল্ফ

এটি কোনও ব্যবহারিক প্রয়োগ ছাড়াই একাডেমিক অ্যাসাইনমেন্ট।
Magom001

1
উদ্দেশ্যপ্রাপ্ত নয়: "প্রতিস্থাপন প্রক্রিয়ার অংশ হিসাবে অ্যাক্সেস চেকিং করা হয়" eel.is/c++draft/temp#deduct-8.note-1
এলএফ

আপনি কোন সংকলক ব্যবহার করছেন? জিসিসি ট্রাঙ্ক বলে মনে হয় কাজ জরিমানা godbolt.org/z/hY6UvY দ্য static_assertব্যক্তিগত পাস operator[]এবং জনসাধারণের জন্য ব্যর্থ।
সেব্রোকম

concept boolইঙ্গিত দেয় যে আপনি কনসেপ্টস টিএসের বিরুদ্ধে সংকলন করছেন, সি ++ 20 ধারণাগুলি নয়। দুজনের মধ্যে নিয়ম আলাদা হতে পারে।
আখরোট

উত্তর:


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