Вперед Объявление экземпляра класса шаблона с виртуальными функциями - PullRequest
0 голосов
/ 28 апреля 2018

Я создал шаблон класса A<T> в mynamespace, который мне нужно переслать объявить для использования в классе B в mynamespace2. Можно ли переслать объявление определенного экземпляра A для использования в B, а именно A<int>?

Файл: a.h

#include "b.h"

namespace mynamespace{    
    template <class T>
    class A{
        A(T);                                // constructor
        mynamespace2::B* b_attribute;
    };    
}

Файл: b.h

/* How to forward declare A<int>? This doesn't work:
 *
 *  namespace mynamespace{
 *     class A<int>;
 *  }
 * 
 * neither does this:
 *
 * namespace mynamespace{
 *     template <class T>
 *     class A<T>
 * }
 */

namespace mynamespace2{    
    class B{
        B();
        mynamespace::A<int>* a_attribute;    // for use over here
        virtual void f(A<int>*);             // note: virtual function
    };    
}

Я ценю любую помощь.

1 Ответ

0 голосов
/ 28 апреля 2018

Это ничем не отличается от объявления чего-либо еще, за исключением того, что вы должны правильно определить пространство имен:

namespace mynamespace{    
    template <class T> class A;
}

A объявлено в mynamespace, поэтому вы должны указать его как таковой.

Если вы действительно хотите избежать явного указания пространства имен каждый раз, добавьте объявление using:

namespace mynamespace2{
    using mynamespace::A;

    class B{
        B();
        A<int>* a_attribute;    // for use over here
    };    
}

После объявления using вы можете просто обратиться к A в любом месте mynamespace2.

Обратите внимание, что вы все равно должны заранее объявить шаблон в другом пространстве имен, прежде чем извлекать его с помощью using.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...