предопределения шаблонов
От: Аноним  
Дата: 03.10.07 12:01
Оценка:
Есть такой кусок кода, помогитье праельно указать компилятору, что template<class T> class B существует ниже по коду.


// Так неработает
class B;

// И так неработает
template<class T> class B;


class A
{
public:
    void f()
    {
        B<int> b;
    }
};

template<class T>
class B : public A
{
};
Re: предопределения шаблонов
От: frogkiller Россия  
Дата: 03.10.07 12:10
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Есть такой кусок кода, помогитье праельно указать компилятору, что template<class T> class B существует ниже по коду.


Как-то так:

template <class T>
struct A
{
    void f()
    {
        T b;
        b.g();
        std::cout << "hi" << std::endl;
    }

};

template <typename T>
struct B : public A< B<T> >
{
    void g()
    {
        std::cout << "ha" << std::endl;
    }
    void test()
    {
        f();
    }
};

int main(int argc, char *argv[])
{
    B<int> b;
    b.test();

    return 0;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: предопределения шаблонов
От: quodum  
Дата: 03.10.07 12:26
Оценка: +1
Здравствуйте, Аноним, Вы писали:

[]

Так нельзя. Чтобы инстанцировать B<int>, компилятор должен знать полное определение B<>.

Вынеси определение функции f из тела класса A.
Re: предопределения шаблонов
От: Константин Л. Франция  
Дата: 03.10.07 13:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>

А>class A
А>{
А>public:
А>    void f()
А>    {
А>        B<int> b; // тут у тебя POI - point of instantiation
А>    }
А>};

А>


Дополню к сообщению quodum.
Re[2]: предопределения шаблонов
От: Erop Россия  
Дата: 03.10.07 21:16
Оценка:
Здравствуйте, Константин Л., Вы писали:

А>>
// А разве не тут?
А>>class A
А>>{
А>>public:
А>>    void f()
А>>    {
КЛ>А>        B<int> b; // тут у тебя POI - point of instantiation
А>>    }
А>>};

А>>


КЛ>Дополню к сообщению quodum.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: предопределения шаблонов
От: Константин Л. Франция  
Дата: 04.10.07 09:36
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Константин Л., Вы писали:


А>>>
E>// А разве не тут?
А>>>class A
А>>>{
А>>>public:
А>>>    void f()
А>>>    {
КЛ>>А>        B<int> b; // тут у тебя POI - point of instantiation
А>>>    }
А>>>};

А>>>


КЛ>>Дополню к сообщению quodum.


имхо, не там
Re[4]: предопределения шаблонов
От: Erop Россия  
Дата: 04.10.07 11:49
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>имхо, не там


А тут объекты b1 и b2 одного типа?

// А разве не тут?
class A
{
public:
    void f()
    {
        B<int> b1; // тут у тебя POI - point of instantiation
    }
};

B<int> b2; // статический объект


Для выяснения того одного типа они или нет, можно, например, спросить у каждого адрес какого-нибудь статического поля...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.