টেমপ্লেট শ্রেণীর ভিতরে টেমপ্লেট ফাংশন


119

আমার এই কোডটি রয়েছে:

template <class T>
class MyClass {
    public:
        template <class U>
        void foo() {
            U a;
            a.invoke();
        }
};

আমি এই ফর্ম এটি চাই:

template <class T>
class MyClass {
    public:
        template <class U>
        void foo();
};

template <class T> /* ????? */
void MyClass<T>::foo() {
    U a;
    a.invoke();
}

আমি কীভাবে এটি করতে পারি? সঠিক বাক্য গঠন কী?



@ হাইবস: এফডাব্লুআইডাব্লু, আপনি ঘোষণাকে সিপিপি ফাইলে স্থানান্তর করতে পারেন। এটি বলেছিল, আমি কেবল একবার কিছু হ্যাকারি করার জন্য এটি করেছি। সেক্ষেত্রে এটি কীভাবে করা যায় তা জেনে রাখা জরুরি।
— থমাস এডিং

ফাংশন বডি দ্বারা প্রয়োজনীয় নির্ভরতা সংজ্ঞার পরে কখনও কখনও ফাংশন সংজ্ঞাটিকে ক্লাসের বাইরে নিয়ে যেতে হয়। এটি ঘটে যখন ক্লাস এ ক্লাস বি এবং বি ব্যবহার করে এবং এ ব্যবহার করে এ ক্ষেত্রে আপনি A এবং B ঘোষণা করেন, তারপরে A এবং B পদ্ধতিগুলি সংজ্ঞায়িত করুন।
— হুইজিল

উত্তর:


180

এটি লিখুন:

template <class T>
template <class U>
void MyClass<T>::foo() { /* ... */ }

অকার্যকর MyClass <T> :: foo <T> () ... ধন্যবাদ, আমি এটি আগে চেষ্টা করেছিলাম, তবে এটি আমার কাজ করে না .. সম্ভবত আমাকে পরিষ্কার প্রকল্প করতে হয়েছিল do
— মাইকেল

@ ব্যবহারকারী 1074367: না, আমি এটি বলেছি বলে মনে করি।
— কেরেক এসবি

3
প্রকৃতপক্ষে আমি লিখেছি: টেমপ্লেট <ক্লাস টি> টেম্পলেট <ক্লাস ইউ> অকার্যকর মাই ক্লাস <টি> :: ফু () a ইউ এ; a.invoke (); it এবং এটি কাজ করে
— মাইকেল

11
@ ব্যবহারকারী 1074367: এর ... হ্যাঁ, আমি উত্তরে যা বলি, না?
— কেরেক এসবি

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