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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> неопределенный тип шаблонного объекта в качестве, аргумента 
V
    Опции темы
boostcoder
Дата 9.11.2010, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



всем доброй ночи.
код:
Код

#include <boost/shared_ptr.hpp>

template<typename T>
struct builder {

   template<typename C>
   boost::shared_ptr<C> get() {
      return boost::shared_ptr<C>(new C(this));
   }
};

struct type1 {
   type1(builder* b) {} // <<<<<<<<<<<<<<<<<<<<<<<<<<<
};

struct type2 {
   type2(builder* b) {} // <<<<<<<<<<<<<<<<<<<<<<<<<<<
};

int main() {
   builder<int> builder;
   boost::shared_ptr<type1> ptr = builder.get<type1>();
}

http://liveworkspace.org/code/38805b669f11...4c38960f626bab0
нужно в конструкторы type1 и type2 передать указатели на тип builder<>. но дело в том, что в момент использования указателя в конструкторах, тип шаблона builder не определен. хз как еще объяснить smile 
в общем, нужно чтоб type1 и type2 могли использовать builder. вот smile 

спасибо.


Это сообщение отредактировал(а) boostcoder - 9.11.2010, 06:10
PM WWW   Вверх
mrbrooks
Дата 9.11.2010, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 2
Всего: 306



Цитата(boostcoder @  9.11.2010,  06:10 Найти цитируемый пост)
нужно в конструкторы type1 и type2 передать указатели на тип builder<>. 

указатель то указателем, но тип то указать надо, который обобщает шаблон.

Код

struct type1 {
   type1(builder<Fuck>* b) {} // <<<<<<<<<<<<<<<<<<<<<<<<<<<
};

PM MAIL   Вверх
xvr
Дата 9.11.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Т.к. builder у тебя шаблон, то использование его как есть (без конкретного типа в <>) приведет к тому, что type1 и type2 так же станут шаблонами:
Код

template<typename T> struct bulder;

template<typename T>
struct type1 {
 type1(builder<T>*);
};
Если это не устраивает, то builder<> надо наследовать от не шаблонного класса и передавать в type::type именно его
Код

struct builder_base;

struct type1 {
 type1(builder_base*);
};

template<typename T>
struct builder : public builder_base {
...
};


PM MAIL   Вверх
boostcoder
Дата 9.11.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



xvr, это подходит. спасибо smile 
PM WWW   Вверх
mes
Дата 9.11.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



интересно, а что за задача такая ?


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 9.11.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  9.11.2010,  14:37 Найти цитируемый пост)
интересно, а что за задача такая ? 

все та же smile 
получение интерфейсов.
можно использовать так:
Код

net_client<typelist> client(...);
class1::shared_ptr p = client.get<class1>();
p->method(...);
// или так:
client.get<class1>()->method(...);


PM WWW   Вверх
azesmcar
Дата 10.11.2010, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



boostcoder
Еще вариант

Код

#include <boost/shared_ptr.hpp>

template<typename T>
struct builder {

   template<typename C>
   boost::shared_ptr<C> get() {
      return boost::shared_ptr<C>(new C(this));
   }
};

struct type1 {
   template <typename T>
   type1(builder<T>* b) {} // <<<<<<<<<<<<<<<<<<<<<<<<<<<
};

struct type2 {
   template <typename T>
   type2(builder<T>* b) {} // <<<<<<<<<<<<<<<<<<<<<<<<<<<
};

int main() {
   builder<int> builder;
   boost::shared_ptr<type1> ptr = builder.get<type1>();
}

http://liveworkspace.org/code/505f66f9511f...82eef02cba8eab6


Это сообщение отредактировал(а) azesmcar - 10.11.2010, 08:24
PM   Вверх
boostcoder
Дата 10.11.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



azesmcar, так даже естественней выглядит smile 
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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