Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анонимные типы в шаблонах классов, Поддерживаются ли C++? 
:(
    Опции темы
Logo
Дата 12.3.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Пытаюсь сделать шаблон, вызывая его с анонимным типом, но компилятор ругается, не хочет есть код, выдавая соответствующее сообщение.
Код

template <class Type>
class A {
   typedef Type _Type; // наличие или отсуствие не влияет на компиляцию
};

typedef A<struct {int a;}> AA;

Правильно ли я понимаю, что анонимные типы невозможно передавать в шаблоны C++? Странно, зачем такое ограничение, если имя типа используется только внутри класса...
PM MAIL   Вверх
boostcoder
Дата 12.3.2012, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Logo @  12.3.2012,  22:00 Найти цитируемый пост)
транно, зачем такое ограничение, если имя типа используется только внутри класса

так ведь ничто не запрещает декларить типы внутри классов:
Код

struct type {
   struct mymegapuperghypertype { int a; };

   template<typename T>
   void f(const T& t) {}
};


или так:
Код

struct type {
   
   template<typename T>
   void f(const T& t) {}

   void method() {
      struct mymegapuperghypertype { int a; };

      mymegapuperghypertype arg;
      f(arg);
   }
};

PM WWW   Вверх
Logo
Дата 12.3.2012, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Так а смысл шаблона тогда? Мне нужно сгенерировать множество классов на основании структур (и параметра unsigned long), а так получается методы нужно в каждом классе заново прописывать.

Это сообщение отредактировал(а) Logo - 12.3.2012, 23:03
PM MAIL   Вверх
boostcoder
Дата 13.3.2012, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Logo @  12.3.2012,  23:02 Найти цитируемый пост)
Так а смысл шаблона тогда?

вот шаблон с шаблонной структурой:
Код

#include <iostream>

struct type {
   
   template<typename T>
   void f(const T& t) {
      struct mymegapuperghypertype { T a; };
      mymegapuperghypertype arg = {t};
      std::cout << arg.a << std::endl;
   }

   void method() {
      f(3);
      f(3.14);
   }
};

int main() {
   type t;
   t.method();
}


http://liveworkspace.org/code/1b8b4f673dc0...5b53bebb2dbfbe5


или объясняй задачу шире.
PM WWW   Вверх
Logo
Дата 13.3.2012, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Ну, нужно создать класс(много классов) на основе структур, и параметра unsigned long. Этому классу должны быть доступны методы из либо родительского класса, либо шаблона.
Получается самое красивое решение, которое выходит, создать не анонимную структуру, с именем, аналогичным имени класса, начиная с подчеркивания:
Код

_ClassName struct {
  int one;
  int two;
  int three;
}
typedef BaseClass<_ClassName, 10> ClassName
//И т.д., для каждой структуры и числа свой класс

//Базовый шаблон
template <class T, unsigned long size>
class {
  //Методы здесь
}


Это сообщение отредактировал(а) Logo - 13.3.2012, 04:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.