একটি পরিবর্তনশীল টেম্পলেট একটি টেম্পলেট টেম্পলেট আর্গুমেন্ট হিসাবে পাস করা যেতে পারে?


11

নিম্নলিখিত অযৌক্তিক উদাহরণটি সংকলন করে না, তবে কোনও টেম্পলেট টেমপ্লেট আর্গুমেন্ট হিসাবে কোনও পরিবর্তনশীল টেম্পলেটটি পাস করার কোনও অন্য উপায় আছে কি?

template<typename T>
constexpr auto zero = T{0};

template<typename T, template<typename> auto VariableTemplate>
constexpr auto add_one()
{
    return VariableTemplate<T> + T{1};
}

int main()
{
    return add_one<int, zero>();
}

সংকলক এক্সপ্লোরার চেষ্টা করুন

উত্তর:


3

সংক্ষিপ্ত উত্তর: না

দীর্ঘ উত্তর: হ্যাঁ আপনি একটি শ্রেণিবদ্ধ টেমপ্লেটের মাধ্যমে কিছু দিকনির্দেশ ব্যবহার করতে পারেন:

template<typename T>
constexpr auto zero = T{0};

template<typename T>
struct zero_global {
    static constexpr auto value = zero<T>;
};

template<typename T, template<typename> class VariableTemplate>
constexpr auto add_one()
{
    return VariableTemplate<T>::value + T{1};
}

int main()
{
    return add_one<int, zero_global>();
}

সরাসরি উদাহরণ


কিছুটা পিছনের দিকে মনে হচ্ছে যে স্থির সদস্যের সাথে স্ট্রাক্ট করতে হবে। এটি কি এমন কিছু যা ভবিষ্যতের মান নিয়ে আসা আশা করতে পারে? কোন ধারণা কেন এটি ইতিমধ্যে সম্ভব নয়?
idclev 463035818

1
@ প্রাক্তন অজ্ঞাত 666৩৩৮৮১৮ আমি মনে করি না যে এটি এখনও কেউ প্রস্তাব করেছিল (এটি কখনও কাগজে দেখেনি, সম্ভবত আমি এটি মিস করেছি?) এবং এখানেও জটিলতা রয়েছে। এখনই, অ-টাইপযুক্ত টেম্পলেট প্যারামিটারগুলি হ'ল জন-মান। কিন্তু value<T>মানে কি হবে ? বৈশ্বিক পরিবর্তনশীল একটি রেফারেন্স? এছাড়াও, আপনি ওডিআর নন-টাইপ টেম্পলেট প্যারামিটার ব্যবহার করতে পারবেন না, তবে আপনি বিশ্বজুড়ে একটি টেম্পলেট দিয়ে পারেন।
গিলাইম র্যাকিকোট

ইঙ্গিতগুলির জন্য ধন্যবাদ, আমি এখনও সি ++ ১১ এ রয়েছি, তাই আমি পরিবর্তনশীল টেম্পলেটগুলির সাথে খুব বেশি পরিচিত নই, এবং বাক্সটির বাইরে কাজ করার জন্য আমার যে প্রত্যাশা ছিল তা
হ'ল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.