Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2021, 15:27   #21
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
Имелся ввиду мой пример, в контексте которого это возможно и имеет смысл, по-моему.
А какая разница? Смысл "динамического переключения" поменяется?

Цитата:
Сообщение от apofioz Посмотреть сообщение
Можно функцию вызвать, и не надо будет ничего выставлять.
В вашем случае пользователь должен знать о реализациях и передать одну из них в конструктор. Как тут вызов функции поможет?

Цитата:
Сообщение от apofioz Посмотреть сообщение
Это уже придирки я хотел разобраться, а не ещё больше запутываться.
Нет. Вы придумали свое определение и не хотите от него отступать.

Цитата:
Сообщение от apofioz Посмотреть сообщение
Тогда вполне подойдёт тот вариант, который я привёл выше с dynamic_cast<>(), всё от контекста зависит, видимо.
Не пойдет. Давайте пример с конструктором, раз он вам так нравится:
Задача: Проверить, что процессор поддерживает AVX и переключиться на реализацю AVX. Если нет, то взять стандартную SSE2.

В вашем случае пользователь должен будет знать об этих реализациях и написать за вас, что-то типа:
Код:
int info[4];
cpuid(info, 0);
int nIds = info[0];

cpuid(info, 0x80000000);
unsigned nExIds = info[0];

if (nIds >= 0x00000001){
    cpuid(info,0x00000001);
    if ((info[2] & ((int)1 << 28)) != 0)
      w = new Lib::SuperClass(new Lib::SuperClassImpl_AVX);
    else
      w = new Lib::SuperClass(new Lib::SuperClassImpl_SSE2);
} else {
  w = new Lib::SuperClass(new Lib::SuperClassImpl_SSE2);
}
+ встает вопрос, кто удаляет указатель на реализацию?
FrosyaZZ вне форума Ответить с цитированием
Старый 17.02.2021, 17:05   #22
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Вы придумали свое определение и не хотите от него отступать.
Может всё проще я пытаюсь разобраться, но не понимаю, что вы хотите мне объяснить) Мне этот механизм, который называется замкстителем не ясен...


Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
+ встает вопрос, кто удаляет указатель на реализацию?
Если это происходит в proxy, то деструктор proxy, я так думаю, хотя он о реализациях ничего и не знает... Может нужен виртуальный деструктор в базовом классе...

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
В вашем случае пользователь должен будет знать об этих реализациях и написать за вас, что-то типа:
Код, который вы привели выше выполняется в классе или пользователь выполняет его отдельно?
В задании было написано создать два объекта proxy и передать в них реализации, я так и делал, может быть, нужно было проверку выполнять иначе, не знаю. Значит эта иерархия является частью, другой иерархии, которая узнаёт поддерживает ли процессор реализацию AVX или SSE2. Более у меня соображений нет.
apofioz вне форума Ответить с цитированием
Старый 17.02.2021, 17:41   #23
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
Мне этот механизм, который называется замкстителем не ясен...
Он очень прост. Есть некоторый класс. Есть класс Прокси, который имеет тот же интерфейс, что позволяет его использовать вместо исходного. Прокси может выполнять какие-то доп. действия до и/или после вызовов. Например, умный указатель, который кроме интерфейса указателя еще и подсчет ссылок ведет.

Редко указатель на реализацию передают в конструктор. Но чаще это делает сам прокси, т.к. это снимает некоторые вопросы и добавляет возможностей: можно управлять временем жизни, можно делать линивую инициализацию и т.д.

Цитата:
Сообщение от apofioz Посмотреть сообщение
Может нужен виртуальный деструктор в базовом классе...
А вы собрались интерфейс без него делать?

Цитата:
Сообщение от apofioz Посмотреть сообщение
Код, который вы привели выше выполняется в классе или пользователь выполняет его отдельно?
Там же все написано.

Цитата:
Сообщение от apofioz Посмотреть сообщение
В задании было написано создать два объекта proxy и передать в них реализации, я так и делал, может быть, нужно было проверку выполнять иначе, не знаю.
Так к этой части и вопросов не было. ) Тут сложно накосячить - в списке инициализация указатель проинициализировали и все.
FrosyaZZ вне форума Ответить с цитированием
Старый 17.02.2021, 23:01   #24
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Редко указатель на реализацию передают в конструктор. Но чаще это делает сам прокси, т.к. это снимает некоторые вопросы и добавляет возможностей: можно управлять временем жизни, можно делать линивую инициализацию и т.д.
Да, я читал про это, что-то подобное там там же написано. Но объект то на базовый класс он(прокси) хранит?


Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Редко указатель на реализацию передают в конструктор. Но чаще это делает сам прокси,
Сам передаёт реализацию, но куда? К базовому классу?
apofioz вне форума Ответить с цитированием
Старый 18.02.2021, 15:24   #25
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
Но объект то на базовый класс он(прокси) хранит?
Указатель на "интерфес" он хранит. Не на свой базовый, а на реализацию.

Цитата:
Сообщение от apofioz Посмотреть сообщение
Сам передаёт реализацию, но куда? К базовому классу?
Никуда он не передает. У него есть указатель, когда надо создает, когда надо уничтожает.
FrosyaZZ вне форума Ответить с цитированием
Старый 18.02.2021, 21:29   #26
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Указатель на "интерфес" он хранит. Не на свой базовый, а на реализацию.
А пример простенький можно, без заморочек, так сказать для наглядности!
apofioz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal Матрицы - элемент bij которой равен сумме элементов данной матрицы расположенных в области, определяемой индексами i,j так, как показано на рисунке users1 Помощь студентам 0 12.01.2017 06:04
Модифицировать программу так, чтобы она осуществляла поиск подматрицы n,в которой сумма элементов главной диагонали наибольшая АсяЯ Паскаль, Turbo Pascal, PascalABC.NET 0 05.11.2016 16:57
архитектурная компьютерная программа для создания дизайна igori.alekseev Свободное общение 2 16.01.2009 16:37