Şablon sınıfı içindeki şablon işlevi


119

Bu koda sahibim:

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

Bunu şu biçimde istiyorum:

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

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

Bunu nasıl yapabilirim? Doğru sözdizimi nedir?


Neden işlev sınıf decl içinde tanımlanmıyor (bkz. Codepad.org/wxaZOMYW )? Fonksiyon
decl'i

@hiobs: FWIW, beyanı bir CPP dosyasına taşıyabilirsiniz. Bununla birlikte, biraz bilgisayar korsanlığı yapmak için bunu yalnızca bir kez yaptım. Bu durumda, bunun nasıl yapılacağını bilmek önemlidir.
Thomas Eding

Bazen işlev gövdesi tarafından ihtiyaç duyulan bağımlılıkların tanımlanmasından sonra işlev tanımını sınıfın dışına taşımak gerekir. Bu, A sınıfı B sınıfını ve B de A'yı kullandığında gerçekleşir. Bu durumda, A ve B'yi bildirir, ardından A ve B yöntemlerini tanımlarsınız.
Wheezil

Yanıtlar:


180

Bunu yaz:

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

void MyClass <T> :: foo <T> () ... teşekkürler, daha önce denedim ama işe yaramıyor .. belki de temiz proje yapmam gerekiyordu.
Michael

@ user1074367: Hayır, söylediğim gibi olduğunu düşünüyorum.
Kerrek SB

3
aslında şunu yazdım: şablon <sınıf T> şablon <sınıf U> void Sınıfım <T> :: foo () {U a; a.invoke (); } ve işe yarıyor
Michael

11
@ user1074367: Err ... evet, cevabımda söylediğim şey bu değil mi?
Kerrek SB

8
@mike: Üye şablonları tamamen normal ve yaygın bir şeydir.
Kerrek SB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.