Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Тест :?  (Прочитано 7253 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
LP
Помогающий

ru
Offline Offline

« : 02-03-2005 11:10 » new

Привет всем!!! Улыбаюсь Решал я как-то тут недавно тесты по C++ и
несколько с виду простых,  меня поставили в тупик.
Например:

Вам необходимо реализовать «умный указатель» - класс, который хранит адрес в памяти,
где хранится значение переменной, а также имеет ряд дополнительных методов:
для подсчета количества ссылок на объект, для автоматической сборки мусора и т.д.
Для обеспечения универсальности данного класса необходимо воспользоваться шаблоном класса.
Какой из вариантов позволяет решить поставленную задачу?

Код:
(1)
template <class ValueType>
class Pointer
{
private:
ValueType* value;
/*...*/
};
(2)
template <typename ValueType>
class Pointer
{
private:
typename ValueType* value;
/*...*/
};
(3)
template <class ValueType>
class Pointer
{
private:
class ValueType* value;
/*...*/
};
Честно говоря я не понимаю в чем разница между 2-мя
первыми ответами? Буду благодарен если кто-нибудь разъяснит Улыбаюсь
« Последнее редактирование: 03-03-2005 15:56 от LP » Записан

Если эта надпись уменьшается, значит ваш монитор уносят
LP
Помогающий

ru
Offline Offline

« Ответ #1 : 03-03-2005 14:11 » 

Уточню: есть ли разница в данном случае между
ValueType* value; и typename ValueType* value;?

Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Serega
Гость
« Ответ #2 : 03-03-2005 20:44 » 

Разница не велика и не принципиальна
Например если один из параметров шаблона это класс реализующий стратегию, то нам наверняка потребуются его внутенние определения, в этом случае лучше использовать typename, так проще подружиться с компилятором
Код:
template <typename value_type, typename thread_strategy>
class container : public thread_strategy
{
...
public:
void add(value_type elem)
{
typename thread_strategy::lock lock(this);
//adding element
}
}


class single_threaded_strategy
{
public:
class lock
{
public:
lock(single_threaded_strategy*) {}
};
}

class multi_threaded_strategy
{
mutex m;
public:
class lock
{
public:
lock(multi_threaded_strategy* st)
{
st->m.lock();
}
};
}
typename указывает компилятору что мы имеем ввиду именно тип а не что-то еще
У Александреску вроде написано когда лучше использовать typename
Записан
LP
Помогающий

ru
Offline Offline

« Ответ #3 : 04-03-2005 11:54 » 

Спасибо за ответ.
До книги Александреску, правда, мне еще надо дорасти Улыбаюсь
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines