Если надо прокинуть объект, то делать это надо через указатель на интерфейс. И указатель должен быть голым (Raw Pointer). При этом, с другой стороны вызова функции пользоваться желательно только функциями этого интерфейса. И еще с этим интерфейсом желательно не делать никаких преобразований к другим типам.
Всегда следует помнить что внутри плагина среда исполнения может оказаться другой по сравнению с основным приложением.
Может быть ты это все и так знаешь... А может быть и нет. Я просто делюсь информацией.
lightalex , точно в том-же проекте используется схема плагинов на основе интерфейсов объектов.
conv-core содержит объект логгера, который, на самом деле, представлен C# объектом. Так вот conv-core отдает интерфейс объекта логгера в плагин, чтоб тот писал свои сообщения.
В результате, все плагины пишут в единый системный лог приложения, куда пишет и само приложение.
Андрей Клэй , вопрос в ответе не нуждается. Тебе все написали прямо в сообщении об ошибке.
Помимо MSVS и PTVS тебе еще надо поставить сам питон.
Окружения питона для PTVS редактируются в настройках MSVS.
Дмитрий , по изложенной картине можно гадать как по кофейной гуще. Эффект будет таким же.
Хорошо, ты уже написал что будешь основывать на этом проект. А что это за проект? Какие у него цели? Какие функции?
Я достаточно часто встречаю ситуацию, когда вместо того, чтобы описать мне задачу, мне пытаются предоставить информацию как эту задачу решать. И информацию дать пытаются именно те, от кого это никогда не потребуется.
У тебя есть вопрос, но нам ты его не задаешь. Вместо постановки самого вопроса ты спрашиваешь верно ли некоторое решение твоего вопроса. Можно ли дать качественный ответ в такой ситуации?
Koala-Punch , этож такой жуткий кошмарищще... аж развидеть хочется.
Так, с постановкой вопроса у тебя большие проблемы. Вопрос даже после твоих уточнений никак понятен не стал.
Ты лучше вот что скажи. Изначальная иерархия классов тобой создана? Или это учитель дал? Изменить ее можно?
Хотя, думаю, даже если ее дал учитель, то изменить ее все равно можно.
Постарайся формализовать свой вопрос. Если ты не можешь доходчиво изложить его другому человеку, то скорее всего ты и сам его не понимаешь.
Если вопрос о том, о чем мне показалось, тогда отвечу.
Ingernirated , на этот вопрос я не могу ответить, т.к. не владею нужной информацией. :)
Я использую эти инструменты только тогда, когда их выбор оправдан вескими доводами.
Как заметил Saboteur , преимущество C# перед C++ , прежде всего, в скорости разработки.
В частности, скорость компиляции и запуска в C# в несколько раз быстрее, а модульная организация не порождает каскадной сборки кода, который не был затронут разработчиком. Это приводит к очень сильному сокращению цикла разработки и тестирования. Управление памятью средствами C# тоже сильно повышает скорость разработки, но этот довод для меня (как для пользователя C++) всегда был самым незначительным.
Так же C# "из коробки" предоставляет очень богатый набор инструментов, включая инструменты конкурентной разработки и параллелизма. C++ обязывает реализовать эти инструменты или использовать сторонние библиотеки, в каждой из которых есть свои соглашения и допущения.
А хороший механизм оптимизации во многих случаях сводит к минимуму разницу в быстродействии между C# и C++ (но не во всех).
Bloodskys , такие вопросы обычно остаются без решений и вообще являются риторическими, поэтому коммент, а не ответ.
2КБ/сек - это нисколько даже на одного игрока. Точные данные для примера - клиент RO получал около 1МБ трафика в час, т.е. порядка 17КБ в секунду. И это был крайне экономичный протокол. Сейчас есть куда прожорливее примеры.
Для сервера хорошо подходит C#, особенно если умеешь конкурентность и параллелизм. Если знаком с микроядерной архитектурой и архитектурой сервисов/микросервисов, то на C# вполне получится создать горизонтально расширяемый сервер с поддержкой сотен тысяч пользователей в онлайне. Разработка на C# значительно быстрее чем на C/C++, а номинальная надежность кода значительно выше чем в C/C++. Быстродействие достигается горизонтальным расширением и параллелизмом, чего в C# добиться значительно проще чем во все тех же C/C++.
C/C++ - это инструмент для совсем других целей.
GLeBaTi , сервер state-less чтоли?
От части nirvimel говорит правильно. Но его слова - это лишь вершина айсберга. Дальше, чтобы понять проблему и дать точное решение, тебе придется нарушить NDA (или мне придется его подписать) и рассказать мне все тонкости организации сервера. Только я не могу этим всем заниматься. :)
Для этих дел обычно применяют стратегии или политики.
Но я предпочитаю конечные автоматы вместе с декомпозицией логики.
Суть обоих подходов сводится к тому, чтобы в нужное время включать и выключать части логики, переводя сущность в строго определенное состояние.
Дальше, чтобы вносить пояснения и передавать только нужную информацию, мне нужны вопросы от тебя.
GLeBaTi , давай поподробнее. Сейчас все описание ничего не поясняет.
20 сущностей - каких? Что описывают эти сущности?
"я должен учесть это во всех местах" - зачем? Если ты это должен, глядя уже на это абстрактное описание, значит что-то с самого начала пошло не так.
Почему количество сущностей должно увеличиваться со временем?
Сергей , почитай про бинарную кучу (Binary Heap / Priority Queue).
Это куча на линейном списке, всегда гарантирующая изъятие самого приоритетного элемента со своей вершины, вне зависимости от того, насколько давно элемент попал в нее.
В куче можно хранить не сам элемент, а интрузивную ячейку, в которой содержится как элемент, так и дополнительная информация для кучи. Любая информация, которую обновляет или использует сама куча.
Текущую позицию элемента в куче определить легко, как просто по его весу, пройдясь алгоритмом по куче, так и через интрузивную ячейку, которая может так же лежать в другом контейнере.
Я не оформляю рекомендацию как ответ т.к. не считаю что это тебе на 100% подойдет. Но этот примитив может помочь тебе думать в нужном направлении.
Сергей , а что означает: "по элементу определить номер его позиции"?
Чтобы найти нужный инструмент, неплохо бы сперва представить себе его во всех красотах.
Какая цель перемещения элементов? А для чего нужно знание позиции? Всегда ли удаление происходит только из головы? Всегда ли добавление происходит в хвост?
Нужно ли выбранный элемент перемещать в сторону хвоста? Или перемещать нужно только в сторону головы?
Элементы в контейнере уникальны или имеются дубликаты? По ссылке ли хранятся элементы или по значению? Две разные инстанции элемента с одинаковым контентом будут разными или одинаковыми?
Пока на примете только бинарная куча и интрузивный лист. Но они оба могут не подойти тебе в зависимости от ответов на вопросы выше.
Toonas , дерзай. :)
Линейная алгебра и Аналитическая геометрия - безумно интересные науки! Тебе понравятся.
А потом, как закончишь хороший универ, буду ждать тебя в рядах игровых программистов. :)
Toonas , как непривычно в наше время встретить человека незнакомого с линейной алгеброй. :)
Да, для понимания матриц и аффинных преобразований тебе стоит взять учебник по "линейке", да потолще, и впитать его в себя.
Это не ответ конкретно на твой вопрос, это моя рекомендация в общем. Разбирая линейку, думай о 3D, тогда тебе понравится.