Вопрос по шаблонам C++
От: RadioShark  
Дата: 08.11.09 21:21
Оценка:
Добрый день!

Допустим, есть у меня класс:


class A
{
   A();
   ~A();

   char* getChar();
}



Хочу я объявить шаблон класса


template<class T>
class B
{
public:
   B();
   ~B();

   char* call_getChar()
   {
      // ... сюда надо написать что-то, чтобы вызвался метод getChar() шаблонного класса T

   }
}



Теперь я создаю экземпляр класса:


B<A> С;
char *p = C.call_getChar();    // должен вызваться метод getChar() из класса А.


Вопрос, что написать в методе call_getChar() ?
Re: Вопрос по шаблонам C++
От: _DAle_ Беларусь  
Дата: 08.11.09 21:24
Оценка:
Здравствуйте, RadioShark, Вы писали:

RS>Добрый день!


RS>Допустим, есть у меня класс:



RS>
RS>class A
RS>{
RS>   A();
RS>   ~A();

RS>   char* getChar();
RS>}
RS>



RS>Хочу я объявить шаблон класса



RS>
RS>template<class T>
RS>class B
RS>{
RS>public:
RS>   B();
RS>   ~B();

RS>   char* call_getChar()
RS>   {
RS>      // ... сюда надо написать что-то, чтобы вызвался метод getChar() шаблонного класса T

RS>   }
RS>}
RS>


Чтобы вызвать член класса тебе нужен объект типа T для начала, либо член должен быть статическим.
Re: Вопрос по шаблонам C++
От: Faust Россия  
Дата: 08.11.09 22:05
Оценка: 15 (1)
Здравствуйте, RadioShark, Вы писали:

есть три способа:
1. В должен быть наследником А
template<typename T>
class В : public T
{
public:
    char* call_getChar()
    { return getChar(); }
};

2. В должен содержать переменную-член типа А
template<typename T>
class В
{
private:
    T    m_tA;
public:
    char* call_getChar()
    { return m_tA.getChar(); }
};

3. функция-член класс А должна быть статической
class A
{
public:
    static char* getChar()
    { return m_tA.getChar(); }
};
template<typename T>
class В
{
public:
    char* call_getChar()
    { return T::getChar(); }
};
Мой компьютер прогоняет бесконечный цикл за 9 секунд, но, мне кажется, он мог бы сделать это быстрее...
Re[2]: Вопрос по шаблонам C++
От: Bell Россия  
Дата: 10.11.09 06:06
Оценка:
Здравствуйте, Faust, Вы писали:

F>Здравствуйте, RadioShark, Вы писали:


F>есть три способа:

...

4.
template<typename T>
class В
{
public:
    char* call_getChar()
    {
        T tmpA;
        return tmpA.getChar();
    }
};


Любите книгу — источник знаний (с) М.Горький
Re[3]: Вопрос по шаблонам C++
От: anonim_44ax  
Дата: 10.11.09 15:06
Оценка: :)
Под Access Violation человека подводите. Не хорошо
Re[3]: Вопрос по шаблонам C++
От: Faust Россия  
Дата: 11.11.09 05:49
Оценка:
Здравствуйте, Bell, Вы писали:

B>4.

B>
B>template<typename T>
B>class В
B>{
B>public:
B>    char* call_getChar()
B>    {
B>        T tmpA;
B>        return tmpA.getChar();
B>    }
B>};
B>


B>

если мы говорим о таком подходе, то целесообразнее сделать так:
class A
{
public:
    char* getChar() { ... }
};

A&    objectA(void) { static A objA; return objA; }

template<typename T>
class В
{
public:
    char* call_getChar()
    { return objectA().getChar(); }
};
Мой компьютер прогоняет бесконечный цикл за 9 секунд, но, мне кажется, он мог бы сделать это быстрее...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.