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


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.