Russian Qt Forum
Апрель 26, 2018, 16:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2 3 ... 118
1  Программирование / Общий / Re: Инкапсуляция флажков : Февраль 23, 2018, 18:56
Цитировать
Ну организовывать сигналы/оповещения для флажка/счетчика - слишком жирно будет.
Я не говорю о сигналах в их привычном понимании..
Идея в том, чтобы переложить контроль над текущим состоянием флажка не на методы Вашего Container, а на функционал самого флажка (он, конечно, теперь должен быть классом, с деструктором, в котором при его уничтожении выставляется соответствующая информация - я самовыпилился и т.д. и другими методами).  И +  дружественный классу флажка менеджер, который будет регестрировать объекты флажков, если они создаются и кладутся в Container. Элемент контэйнера удалился, у флажка сработал деструктор, который сообщил менеджеру о том, что всё - меня нет)

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

Цитировать
Кстати, а что за паттерн, навскидку гугл ничего о нем не выдает.
И не найдёте) Это класс такой в boost::signals) У меня здесь, на этом форуме, в теме про доморощенную реализацию механизма сигнал-слот  какие то слова на эту тему есть..) Где то)
2  Программирование / Общий / Re: Инкапсуляция флажков : Февраль 22, 2018, 21:43
Я бы посмотрел на концепт/паттерн так называемого trackable, который используется в boost::signals.. Т.е. по сути заменить флажёк на отдельный класс, который регестрируется менеджером флажков, и который сам сбрасывает своё состояние при удалении, перемещении и т.д.. и сообщает САМ своему менеджеру при своём изменении..

Но я сейчас подозреваю, что отморозил страшную скверну - знания, принятые на вооружения в boost'е  Улыбающийся
3  Разное / Говорилка / Re: Геометрия (задачки) : Февраль 09, 2018, 09:35
Цитировать
(закраска тр-ка). Неужели и это студентам не дается  Непонимающий Безобразие!
Нет, раскрашивание треугольников и пр. обычно на уроках ИЗО даётся, в начальных классах  Улыбающийся
4  Разное / Говорилка / Re: Геометрия (задачки) : Февраль 08, 2018, 12:36
Давненько мы не брали в руки шашек Улыбающийся С шейдингом (по-простому "рисованием") как-то упорно не идет, уж не знаю почему. Ладно зайдем с др стороны

27) Есть треугольник заданный 3-мя точками ABC (QVector3D). Найти матрицу которая делает его плоским, т.е. после домножения на нее координаты Z всех точек становятся = 0, но длины сторон те же. Использовать QMatrix4x4 (и любые др Qt классы) можно, без всяких ограничений

Здесь бесконечное множество вариантов. Смотри аттач.

ЗЫ там опечатка: вначале нужно сделать буст вдоль оси z, а потом, получившийся вектор подвергать повороту..
5  Программирование / С/C++ / Re: Тупой вопрос по касту элементов вектора. : Декабрь 31, 2017, 14:31
Продумывать нужно архитектуру перед тем как писать.
Сигнатуру метода нужно менять, чтоб он итераторы принимал:
Код
C++ (Qt)
template <class Iter>
void setVector(Iter first, Iter second)
 
6  Разное / Говорилка / Re: Самоубийство программистов : Декабрь 29, 2017, 17:54
Ничего страшного) Куплю себе билет на планету Транай)
7  Программирование / С/C++ / Re: Нетипичное наследование : Октябрь 12, 2017, 21:04
Цитировать
Так что в данном случае просто auto будет достаточно.
Нет, не всегда.. Если нет копирующего конструктора, определённого пользователем, то будет вызван конструктор по умолчанию (поправьте, если не так), что может быть затратно..

Цитировать
Скукатень. А где здесь развесистые switch'и?  Улыбающийся
Это да - не канонично  Смеющийся
8  Программирование / С/C++ / Re: Нетипичное наследование : Октябрь 12, 2017, 20:47
Цитировать
auto&& тогда уж и не думать)
А чем это лучше auto & ?
На сколько я понимаю, (возможно я не прав) это вызовет копирующий конструктор..

Цитировать
Мол, если возникнет какая-то специфика для др команды - мы специализируем для нее шаблон, и все дела!
Да, именно так. Это тот самый случай, когда необходимо разруливать (развлетвлять) поведение системы в зависимости только от пренадлежности её к определённому типу, минуя необходимость создавать объект класса.. Это классический паттерн класс харрактеристик (type traits). И да, он работает (и как это видно из контекста) в тех случаях, когда  "checkCommand не обязан иметь внутренние данные команды чтобы он мог что-то решать."  Улыбающийся Короче, всё решается в зависимости только от типа.
9  Программирование / С/C++ / Re: Нетипичное наследование : Октябрь 11, 2017, 15:56
Вообще не хватает мета информации о типе, которую можно было бы проверять. Задал свойства команды в мета информацию. Проверил ее, она не изменяема и статична для каждого типа. При этом эту мета информацию можно было бы для потомков переопределять.
Ну это типичный паттерн type_traits и плюс немного меташаблонной магии от boost::variant и boost::static_visitor

Код
C++ (Qt)
#include <iostream>
#include <string>
#include <boost/variant.hpp>
#include <memory>
#include <vector>
 
struct typeA_teg{};
struct typeB_teg{};
 
 
class BaseCommand
{
public:
   typedef boost::variant<typeA_teg, typeB_teg> command_type;
 
   BaseCommand() = default;
   virtual void execute() = 0;
   virtual  command_type commandType() = 0;
};
 
class CommandA : public BaseCommand {
 
   public:
       CommandA() = default;
 
       void execute() override {
           std::cout << "execure CommandA" << std::endl;
       }
 
       BaseCommand::command_type commandType()
       {
           return typeA_teg();
       }
};
 
class CommandB : public BaseCommand {
 
   public:
       CommandB() = default;
 
       void execute() override {
           std::cout << "execure CommandB" << std::endl;
       }
 
       BaseCommand::command_type commandType()
       {
           return typeB_teg();
       }
};
 
 
template <class>
struct command_traits;
 
template <>
struct command_traits<CommandA>
{
   static constexpr bool is_dublicated = true;
   typedef typeA_teg command_type;
};
 
 
template <>
struct command_traits<CommandB>
{
   static constexpr bool is_dublicated = false;
   typedef typeB_teg command_type;
};
 
 
template <class Command>
struct is_same_command_type : public boost::static_visitor<bool>
{
   typedef typename command_traits<Command>::command_type command_type;
 
   bool operator()(command_type) const
   {
       return true;
   }
 
   template <class T>
   bool operator()(T) const
   {
       return false;
   }
};
 
std::vector<std::shared_ptr<BaseCommand>> m_arr;
 
template <class Command>
bool checkCommand()
{
 
   if (!command_traits<Command>::is_dublicated) {
       for (auto & c : m_arr)
       {
           if (boost::apply_visitor(is_same_command_type<Command>(), c->commandType())
               return false;
       }
   }
 
   m_arr.push_back(std::make_shared<Command>());
 
   return true;
}
 
Писалось на коленке, могут быть опечатки  Улыбающийся
10  Программирование / С/C++ / Re: Нетипичное наследование : Октябрь 11, 2017, 13:58
m_ax, если не ошибаюсь тут тоже есть создание команды, потом проверка. И в случае если проверка не прошла, command будет автоматически удален. Буду мудрить с типами и switch.
Конечно есть создание команды, ведь далее вызывается её метод (а как его вызвать без создания объекта?) Улыбающийся
11  Программирование / С/C++ / Re: Нетипичное наследование : Октябрь 11, 2017, 13:47
Изменить архитектуру, заменив функцию checkCommand на
Код
C++ (Qt)
template <class Command>
std::shared_ptr<BaseCommand> createCommand()
{
   std::shared_ptr<BaseCommand> command = std::make_shared<Command>();
   if (!command->dublicated()) {
       for (std::vector<BaseCommand *>::iterator it = m_arr.begin() ; it != m_arr.end(); ++it)
           if ((*it)->commandType() ==  command->commandType()) {
               return null_ptr;
           }
   }
 
   m_arr.push_back(command);
 
   return command;
}
 
int main(int argc, char *argv[])
{
 
   auto ca = createCommand<CommandA>();
   if (ca)
       ca->execute();
 
   auto cb = createCommand<CommandB>();
   if (cb)
       cb->execute();
 
   return 0;
}
 
12  Программирование / С/C++ / Re: Найти следующий/предыдущий : Сентябрь 11, 2017, 14:51
Ну да, всё оказалось гораздо проще) 
13  Программирование / С/C++ / Re: Найти следующий/предыдущий : Сентябрь 09, 2017, 11:33
Цитировать
Наверное я плохо понимаю std.
Согласен)
Аналог GetNext:
Код
C++ (Qt)
int GetNext( const std::vector<double> & src, const double & value, const double & tolerance)
{
   auto it = std::lower_bound(src.begin(), src.end(), value, [&](const double & x, const double & val)->bool { return ((x - val) < tolerance); });
 
   return (it != src.end()) ? it - src.begin() : -1;
}
 
С GetPrev уж сами-сами)
14  Программирование / Алгоритмы / Re: Сетка на сфере : Август 21, 2017, 10:24
Цитировать
Какие-то там kd-tree и.т.п.
Можно организовать таблицу, с поиском ближайших узлов за O(ln(N)). Смотри схему ниже..

15  Программирование / Алгоритмы / Re: Сетка на сфере : Август 19, 2017, 14:30
Цитировать
Какие-то там kd-tree и.т.п. - это ж все "велики"
Да пожалуйста.. Но о каком kd-tree и.т.п. сейчас может идти речь, если мы ещё до сих пор не знаем/не представляем (ну лично я) как Вы хотите параметризовывать, строить сетку на сфере? Когда это будет понято, тогда уже можно будет говорить о модели представления этих узлов. Т.е. где то отображение, которое переводит какие-либо 2 обобщённые координаты (например в случае ССК это углы theta и phi) в координаты конкретного узла сетки?

Цитировать
перебор - вот наш метод!
Я себе сейчас представляю следующую ситуацию: предположим у меня есть массив из N векторов узлов на сфере. Т.е. мне его предоставляют по моему требованию. Я могу запросить скажем: хочу сетку из 1000 узлов - мне вернули массив из этих 1000 векторов. Всё.. Я имею random access к нему, могу этот массив сортировать и т.д. Но я не знаю по какому принципу он строится, я имею дело только по факту..
Какова потановка вопроса в таком случае? Для любой точки на сфере найти все ближайшие к ней узлы, нах. внутри заданного телесного угла (из центра сферы).
Я правильно понимаю?


Цитировать
Если мы умеем строить сферу из куба (а мы умеем),
   
Я не совсем понимаю, что Вы имеете в виду под "мы умеем строить сферу из куба"..
   
Страниц: [1] 2 3 ... 118
Страница сгенерирована за 0.145 секунд. Запросов: 23.