Войти
ПрограммированиеФорумОбщее

Как вынести конструктор из декларации шаблонного класса? (3 стр)

Страницы: 1 2 3
#30
15:43, 11 сен. 2019

oxotnik
никак не позволяет. Есть хедер с шаблоном. Например ObjectPool

инклюжу, потом пишу

class EnemiesPool : public ObjectPool<EnemyEntity>
{
    // blah-blah-blah...
}

И этот класс уже нормально разбивается на h и cpp


#31
15:58, 11 сен. 2019

Robotex
Идея была больше в том, что методы ObjectPool<T> при известных значениях T можно вынести.
Даже если эти методы зависят от T

#32
16:11, 11 сен. 2019

Robotex
Окей, поясню на пальцах
У меня есть шаблонная фабрика объектов, осуществляющая создание и инициализацию объектов A, B и C. С помощью параметра туда может быть передано A, B или C. Мне абсолютно не похеру, что она может создавать, т.к. она должна создавать только эти заранее известные классы.

Так что я прекрасно понимаю какие типы там будут использоваться и более того, ОБЯЗАТЕЛЬНО НУЖНО прописать их все.

Из этого следует, что нет никакой необходимости тащить реализацию в заголовочник и засирать код использующих фабрику компонентов.

А то поначитались умных слов...

#33
16:15, 11 сен. 2019

pahaa
ну видишь, у тебя свой случай, а у меня свой. В моем случае невозможно разбить шаблон по разным файлам, а в твоем возможно, но для этого приходится хитро изъебнуться.

#34
(Правка: 16:43) 16:42, 11 сен. 2019

Robotex
> у тебя свой случай, а у меня свой
об этом и речь, вот это наглая ложь:
Robotex
> никак. Темплейт должен быть реализован в том же файле, в котором объявлен
т.к. шаблон должен быть реализован там, где нужно. И в зависимости от задачи это может быть как заголовочный файл, так и файл реализации.

Robotex
> но для этого приходится хитро изъебнуться
Нет, никаких хитростей здесь не нужно, обычное предусмотренное языком явное инстанциирование шаблонов. И необходимость этой декларации вполне очевидна, если понимать, чем шаблон класса отличается от самого класса.
Хитро изъебнуться придётся только если нужны статические функции шаблона. Не знаю, почему в язык не добавили явное инстанциирование функций. Возможно, ноги растут оттуда же, что и отсутствие частичной специализации для функций.

#35
16:49, 11 сен. 2019

pahaa
> об этом и речь, вот это наглая ложь
> т.к. шаблон должен быть реализован там, где нужно. И в зависимости от задачи
> это может быть как заголовочный файл, так и файл реализации.
Ты тугой или как? Тебе сказали, что реализация и специализация немного разные вещи.

#36
17:16, 11 сен. 2019

maks242
> Ты тугой или как? Тебе сказали, что реализация и специализация немного разные
> вещи.
Реализация и специализация - это не немного, а совершенно разные вещи. При чём тут вообще специализация?

#37
17:24, 11 сен. 2019

pahaa
> Реализация и специализация - это не немного, а совершенно разные вещи. При чём
> тут вообще специализация?
Забей, мне не интересно вести с тобой диалог.

#38
19:18, 11 сен. 2019

maks242
> Забей, мне не интересно вести с тобой диалог.
Троллинг 99 уровня, неплохо

#39
10:04, 12 сен. 2019

pahaa Тут речь вообще не про специализацию

#40
14:12, 12 сен. 2019

oxotnik
> Тут речь вообще не про специализацию
Да при чем тут специализация? Где вы тут специализацию увидели?

// AwesomeTemplate.h
template <class T>
struct AwesomeTemplate {
   T getAwesomeObject() const;
};



// AwesomeTemplate.cpp
#include “AwesomeTemplate.h”
#include “A.h”
#include “B.h”

template <class T>
T AwesomeTemplate<T>::getAwesomeObject() const {
   T newObj;
   newObj.makeAwesome();
   return newObj;
}

template struct AwesomeTemplate<A>;
template struct AwesomeTemplate<B>;
#41
14:47, 12 сен. 2019

pahaa
Я и имел ввиду, что ее нет, просто не тот ник зацитировал

Страницы: 1 2 3
ПрограммированиеФорумОбщее