WayMax , у меня "platform" является только одной из подсистем и планомерно подключается, на ряду с остальным подсистемами, в мастер-заголовке библиотеки. Платформенный код является сервисным для всего остального кода.
Для тебя, из приведенного тобой примера, я бы сформировал такие включения.
Иными словами, не API в платформу, а платформа включается в API, т.к. это API зависит от платформозависимого кода, а не наоборот.
Я не работаю в Qt, я предпочитаю MSVS. В проекте студии можно поставить игнор на компиляцию файла в строго оговоренной конфигурации проекта. Этим я пользуюсь для того, чтобы содержать ровно один проект как для сборки консольного приложения, так и для оконного или динамической библиотеки.
Функции main, WinMain и DllMain лежат в разных файлах, которые включаются в сборку проекта только в нужной конфигурации проекта.
По хорошему, Qt тоже должен так уметь.
WayMax , возможно тебе и два проекта библиотек для двух платформ не нужны. Насколько я сейчас понимаю ход твоих мыслей, ты хочешь сделать 3 проекта: один проект GUI для всех платформ и два проекта DLL, по одному для конкретной платформы.
Только проекта DLL тоже хватит одного, т.е. тебе на самом деле нужны только два связанных Qt проекта - это GUI и API.
API ты можешь перестроить по описанному мной способу, в результате из одного Qt проекта на разных платформах будет собираться нужный вариант API.
WayMax , Вот сча прочитал твой коммент к Дмитрий , надеюсь что на мой вопрос о надобности динамической линковки ты не станешь так же реагировать. :)
Иными словами, у тебя уже есть код и тебе хочется меньшей кровью провести экспансию этого кода на другие платформы?
WayMax , ага, прочитал изменение в вопросе, только они все так же продолжают смущать меня.
Для чегож тебе все таки нужны динамические модули, когда можно обойтись статической линковкой при сборке для конкретной платформы?
Толстый Лорри , inline в теле класса пишут, т.к. это хорошее пояснение качества функции. И const в параметрах и возвращаемых значениях функций тоже пишут, т.к. это важное пояснение качества функции.
И не важно, игнорируются эти слова компилятором или нет, код должен быть понятным и содержать документацию в себе.
Иные утверждения - от лени и слабой культуры.
Иными словами, не стоит быть таким категоричным. :)
SibVektor , опять же, все зависит от типов, используемых в объединении. Я очень активно использую такие вещи в форматах файлов и при хранении состояний/статусов/флагов сущностей. Главное - это не испортить разметку битового поля. Для этого тебе в помощь вот такая статья: https://habrahabr.ru/post/142662/
Геворг , https://github.com/isocpp/CppCoreGuidelines/blob/m...
Любое число/строковой литерал или булево значение, напрямую подставленное в коде никак не раскрывает смысла самой подстановки.
Более того, если в нескольких строчках одной функции ты видишь одно и то же число, скажем 0 или 42, один ли смысл оно имеет во всех этих местах? А если это число надо изменить, то во скольких местах его надо изменить? Во всех или только в одном? Или в двух из 5, в каких именно?
Когда число завернуто в константу, оно становится осмысленным через имя и комментарий константы. Это уже документация. Более того, благодаря этому сразу становится видна область применения этой константы, все места ее использования. В добавок, если константу надо изменить, то меняется она лишь в одном месте кода, без детективов, расследований, интриг и скандалов.
Я советую для самостоятельного ответа на твои вопросы сперва прочитать книгу Дастина Босуелла "Читаемый код или Программирование как искусство".
kenny182 , а "оооочень большой" размер - это сколько? Больше 2Мб но меньше 10?
Ок, маска ASCII таблицы - 0x80, если байт не маскируется, то его можно считать печатаемым в ASCII. Только как ты бинарные данные отличишь от текстовых с помощью этой маски?
ForSer , "будет ли правильно пытаться реализовать" - нет. Аргументов не привожу, т.к. тебе же хочется просто изучить питон поглубже. Так что, от попытки отговаривать тебя никто не станет.
"Или лучше учить для такой цели какой то из низкоуровневых языков программирования?" - стоп, ты все таки против правил игры пойти хочешь или просто получше питон изучить?
"насколько это сложная задача если учесть" - начни с IG бота для обычного сапера.
"мне же интересно возможно ли читать данные из памяти процесса" - Люди это даже на AutoIt делают. О продуктивности этого занятия я рассуждать не берусь.
Noortvel , нужно больше информации.
Дай краткое определение типов и функции GetAnimInstance. Так же будет полезным увидеть окружение и обоснование необходимости приведения типа.
Nexeon , XCode :)
Маршалинг типов из ObjC/Swift в C++ и обратно делается куда проще, чем в JNI/JNA/Jni++. Clang умеет сплетать код высокого и низкого уровней в красивую конструкцию. Поэтому для разработки на C++ для iOS кроме XCode толком больше ничего не надо.
PeroPero , неа, не так. :)
Давай на примере с этим самым квадратом и этой анимацией. Скажем, за 1 секунду квадрат перемещается на 10 точек по оси X.
Это будет означать таймлайн ровно с одним ключевым кадром. Таймлайн измеряется в относительных величинах: 0.0 - это начало, 1.0 - это конец вне зависимости от времени анимации. Время задается отдельно от таймлайна и спокойно может меняться прямо в рантайме.
На таймлайне будет стоять ровно один ключевой кадр - в 1.0 в инструкцией вида "хочу быть смещен на (10.0, 0.0, 0.0)".
Представление данных может быть примерно таким: Таймлайн - это структура из вещественного числа (длительность анимации) и вектора ключевых кадров. Ключевой кадр - это структура из вещественного числа (относительное время начала) и инструкции в виде математического вектора.
Когда ты запускаешь анимацию, ключевой кадр в 0.0 говорит тебе задать начальное состояние объекта. Дальше ты считаешь время анимации, на каждом тике обновления считаешь точное относительное время анимации и на таймлайне всегда смотришь на следующий по таймлайну кадр. В процессе анимации выполняется ближайший следующий ключевой кадр.
Т.е. ты идешь по таймлайну из нашего примера, смотришь на единственный и последний кадр, берешь вектор смещения, множишь его на дельту времени с прошлого тика обновления и прибавляешь к трансформации квадрата.
Чаще всего анимации выглядят так, чаще всего в них хранятся инструкции преобразования в локальной системе координат анимируемого объекта. Чаще всего SRT трансформацию раскладывают по именованным таймлайнам и применяют к объекту в правильном порядке.
nazandr , вот бы еще знать, что же скрывается за этой туманной завесой терминов "раюотает" и "не работает".
Что в этих словах кроется? Исклюение? Неправильная работа функции? Разверзнутые небеса с армией ангелов?
Я подозреваю что это из-за того что в памяти находятся две копии данных, но адреса то у них разные.
Не в этом. Статическая переменная внутри образа приложения размечается на пространстве его образа, статическая переменная внутри динамической библиотеки размечается внутри ее образа. Это две разные переменные с точки зрения памяти.
Проблема в другом.
Тебе не удалось собрать минимальный воспроизводящий пример именно потому что проблема не в этих std::string-ах, а в том, как, может быть, с ними работают элементы статической библиотеки.
Тут полный полет фантазии, все ответы есть только у тебя, т.к. только у тебя имеется исходный код.
hound406 , пара замечаний.
Первое, суть вопроса вообще не проглядывается. Согласно текущей постановке вопроса, на него ответить в состоянии только ты. Т.е. только ты можешь принять решение о дизайне базового класса исходя из известной только тебе ситуации.
Второе, согласно твоему ответу Лорри, ты хочешь реализовать полиморфное конфигурирование. Посмотри в сторону декомпозиции и компонентного подхода. Так, может оказаться, тебе будет удобнее.
Для тебя, из приведенного тобой примера, я бы сформировал такие включения.
Иными словами, не API в платформу, а платформа включается в API, т.к. это API зависит от платформозависимого кода, а не наоборот.
Я не работаю в Qt, я предпочитаю MSVS. В проекте студии можно поставить игнор на компиляцию файла в строго оговоренной конфигурации проекта. Этим я пользуюсь для того, чтобы содержать ровно один проект как для сборки консольного приложения, так и для оконного или динамической библиотеки.
Функции main, WinMain и DllMain лежат в разных файлах, которые включаются в сборку проекта только в нужной конфигурации проекта.
По хорошему, Qt тоже должен так уметь.