crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Шаблон, динамическое значения параметра шаблона, параметр не является типом
ViGOur
  опции профиля:
сообщение 15.2.2013, 8:58
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Я создаю динамически объекты некоторых произвольных классов, родитель у них один, тип только разный.
Для вопроизведения ошибки набросал следующий код:
class CEnumClass
{
public:
    enum eEnum{
        P1,
        P2,
        P3
    };
};

template <class T, int TYPE>
class CClass
{
// ...
};

int main(int argc, char *argv[])
{
    CEnumClass::eEnum tmpEnum = CEnumClass::P1;
    const int n0 = 10;
    const int n1 = tmpEnum;

    CClass<int, 0> mc0;                // OK
    CClass<int, n0> mc1;              // OK
    CClass<int, CEnumClass::P1> mc2; // OK
    //CClass<int, n1> mc3;            // error: 'n1' cannot appear in a constant-expression
    //CClass<int, tmpEnum> mc4;  // error: 'tmpEnum' cannot appear in a constant-expression
}

В конструкции template <class T, int TYPE>, TYPE сделан для того, чтобы при инстанцировании различались типы объектов данного класса с задумкой на будущее... И данный тип передается динамически, во время выполнения программы. Тоесть, у меня из вне приходит некий tmpEnum, что в примере и я на основе него должен создать-получить объект mc4, но возникает ошибка указанная в коментарии при создании объекта mc4 .

Как я понимаю это из-за того, что у меня переменная создается динамически (во время выполнения), а шаблон должен быть инстанцирован статически (во время компиляции). Поправьте меня если я ошибаюсь.


И собственно вопрос, как сделать так, чтобы это работало и возможно ли это? :)
Если это не возможно, то буду думать как сделать по другому...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 15.2.2013, 11:47
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


и ещё - при отладке с шаблонами можно запариться, так как отладчик не сможет показать, какой именно сейчас тип у владельца процедуры

Цитата(ViGOur @ 15.2.2013, 14:45) *
в использовании switch,

этот код и будет находится в методе-фабрике

Сообщение отредактировал Алексей1153 - 15.2.2013, 11:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- ViGOur   Шаблон, динамическое значения параметра шаблона   15.2.2013, 8:58
- - ssoft   Цитата(ViGOur @ 15.2.2013, 9:58) Как я по...   15.2.2013, 9:37
- - ViGOur   Боюсь паттерн Фабричный метод здесь не поможет, де...   15.2.2013, 10:19
- - Iron Bug   если это связано с типами, то тожно тупо в констру...   15.2.2013, 10:26
- - ViGOur   Неа, в моем случае объекты p3 и p4 (ePudel и eTaks...   15.2.2013, 10:39
- - Алексей1153   имхо, виртуальное наследование спасёт ) class CDo...   15.2.2013, 11:20
- - ViGOur   Цитата(Алексей1153 @ 15.2.2013, 12:20) им...   15.2.2013, 11:33
- - Алексей1153   Цитата(ViGOur @ 15.2.2013, 14:33) Это как...   15.2.2013, 11:45
- - ViGOur   Пока я вижу выход, как я уже говорил: Цитата(ViGOu...   15.2.2013, 11:45
- - Алексей1153   и ещё - при отладке с шаблонами можно запариться, ...   15.2.2013, 11:47
- - ViGOur   Цитата(Алексей1153 @ 15.2.2013, 12:47) эт...   15.2.2013, 11:51
- - Алексей1153   ViGOur, я - за инкапсуляцию )))   15.2.2013, 11:53
- - ViGOur   да есть она там, но именно в данном случае она не ...   15.2.2013, 12:07
- - Алексей1153   it's enough of encapsulation! No more...   15.2.2013, 12:15
- - ViGOur   ssoft, ты был прав, паттерн Фабричный метод самое ...   15.2.2013, 14:20
- - ViGOur   Изменил код, так как по невнимательности вставил к...   15.2.2013, 14:55
- - Алексей1153   занимательно вышло, кстати, с точки зрения брейнфа...   15.2.2013, 18:25
- - lanz   template <typename T> CAnimal *class_creat...   18.2.2013, 10:01
- - ViGOur   1. Данный код только для класса CAnimal и производ...   18.2.2013, 12:12
- - lanz   Все верно, но это из-за ограничения на то что долж...   18.2.2013, 14:11
- - ViGOur   Цитата(lanz @ 18.2.2013, 15:11) Можно как...   18.2.2013, 15:09
- - lanz   Можно так, с учетом пунктов 1, 3. Вместо енума мож...   18.2.2013, 16:47
- - ViGOur   Честно говоря, ИМХО особо ничего не поменялось... ...   19.2.2013, 10:08
- - lanz   Цитата1. Данный код только для класса CAnimal и пр...   19.2.2013, 11:50
- - Iron Bug   знаешь, я вообще перечитала твою тему с начала и п...   19.2.2013, 16:25
- - ViGOur   Да я уже сдела что хотел и вылодил описание как......   19.2.2013, 16:52
- - lanz   Почему, ну почему-же не подходит?!   19.2.2013, 16:57
- - ViGOur   Цитата(lanz @ 19.2.2013, 17:57) Почему, н...   19.2.2013, 20:56
- - lanz   Ну да, но если сравнивать: Раскрывающийся текстcla...   20.2.2013, 9:14
- - ViGOur   Со всем в принципе согласен, но как я уже говорил ...   20.2.2013, 9:47
- - lanz   Конечно надо использовать то что лучше подходит, к...   20.2.2013, 10:02


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.1.2025, 9:38