информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Портрет посетителяГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
как-то так 09.01.19 13:14  Число просмотров: 4058
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
https://stackoverflow.com/questions/1965249/how-to-write-a-java-enum-like-class-with-multiple-data-fields-in-c
https://www.tangiblesoftwaresolutions.com/articles/cplus_equivalent_to_java_enums.html
<programming>
Как бы половчее реализовать на С++ класс, аналогичный java enum? 08.01.19 11:50  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
В идеале бы так, чтобы все его экземпляры тащить из java в С копипастом.
как-то так 09.01.19 13:14  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
https://stackoverflow.com/questions/1965249/how-to-write-a-java-enum-like-class-with-multiple-data-fields-in-c
https://www.tangiblesoftwaresolutions.com/articles/cplus_equivalent_to_java_enums.html
Это "штучный" класс, а вот, как бы создать шаблон 10.01.19 09:18  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
> https://stackoverflow.com/questions/1965249/how-to-write-a-
аналогичный Жабовскому
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);

private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
А нечто подобное описанному я уже сляпал... Это-то очевидно.
error C2059: syntax error : 'constant' 13.01.19 09:06  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Горит мой деревянный москlll
Короче, сделал вот так:
#include "Enum.h"
#include "Item.h"

static class ItemType : public CEnum
{
public:
ItemType();
virtual ~ItemType();


CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item");
CItem TYPE_TYPE_ID_ITEM( 0x0002, 1, 4, "type_id_item");
CItem TYPE_PROTO_ID_ITEM( 0x0003, 2, 4, "proto_id_item");
CItem TYPE_FIELD_ID_ITEM( 0x0004, 3, 4, "field_id_item");
CItem TYPE_METHOD_ID_ITEM( 0x0005, 4, 4, "method_id_item");
CItem TYPE_CLASS_DEF_ITEM( 0x0006, 5, 4, "class_def_item");
CItem TYPE_MAP_LIST( 0x1000, 16, 4, "map_list");
CItem TYPE_TYPE_LIST( 0x1001, 6, 4, "type_list");
CItem TYPE_ANNOTATION_SET_REF_LIST( 0x1002, 7, 4, "annotation_set_ref_list");
CItem TYPE_ANNOTATION_SET_ITEM( 0x1003, 8, 4, "annotation_set_item");
CItem TYPE_CLASS_DATA_ITEM( 0x2000, 9, 1, "class_data_item");
CItem TYPE_CODE_ITEM( 0x2001, 10, 4, "code_item");
CItem TYPE_STRING_DATA_ITEM( 0x2002, 11, 1, "string_data_item");
CItem TYPE_DEBUG_INFO_ITEM( 0x2003, 12, 1, "debug_info_item");
CItem TYPE_ANNOTATION_ITEM( 0x2004, 13, 1, "annotation_item");
CItem TYPE_ENCODED_ARRAY_ITEM( 0x2005, 14, 1, "encoded_array_item");
CItem TYPE_ANNOTATIONS_DIRECTORY_ITEM(0x2006, 15, 4, "annotations_directory_item");
};
Соответственно, создал CEnum и CItem c как бы я тайпы не переименовывал, как бы я не переписывал аргументы и что бы не менял в конструкторе получаю error C2059: syntax error : 'constant'.
Кака исчезает только, если конструктор делаю без аргументов.
В .h не возможно инициализировать объекты. 19.01.19 06:13  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
А если я их объявлю в .cpp, то они только там видны и будут. Как это разрулить так, чтобы было типа
CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item"); и этот TYPE_STRING_ID_ITEM был доступен из других модулей
В Си и C++ существует такое понятие, как "единица компиляции" 04.06.19 19:17  
Автор: Den <Денис Т.> Статус: The Elderman
Отредактировано 06.06.19 11:31  Количество правок: 1
<"чистая" ссылка>
То, что объявлено внутри единицы компиляции, существует только там, а из других единиц компиляции ты можешь получить доступ к тому, что объявил через включение.

Заголовочные файлы также являются единицами компиляции и если ты объявил как static с инициализацией некий синглетон, то к нему, так или иначе, можно получить доступ. Например, в заголовочном файле ты можешь объявить:
static
TYPE_STRING_ID_ITEM* getStringItem1()
(
  static
  TYPE_STRING_ID_ITEM *instance = NULL;
  if (NULL == instance)
    instance = new TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item");
  return instance;
)

---
Экземпляр как переменной типа TYPE_STRING_ID_ITEM, так и возвращающей ссылку на неё функции, находящихся в заголовочном файле, будет только один для всех .cpp файлов, что будут включать этот заголовочный файл.
Хорошую вещь начал, но сил не хватило закончить... 24.08.20 04:06  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Уже и забыл, что делал! А делал-то ведь Dex-едитор на С.

Суть, родная гугловая либа сборки-разборки Dex-файлов спотыкается на загогулинах порождаемых обфускатором. Разобрать можно, посмотреть можно, а собрать обратно - хрен! А, если патчить не разбирая? Как ехе-шники патчат в гексе? Надо только разобрать поля Dexа по полочкам, найти, декомпилить и поправить нужный фрагмент. Вот, это я сделать и хотел, для чего и пытался Dex-либу портировать в С, да малость вспотел...
как с любой другой переменной 21.02.19 19:12  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
> А если я их объявлю в .cpp, то они только там видны и
> будут. Как это разрулить так, чтобы было типа
> CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item");
> и этот TYPE_STRING_ID_ITEM был доступен из других модулей

Инициализировать в одном файле, в другом объявлять как extern.
Хвост древнего С 20.01.19 05:45  
Автор: Zef <Alloo Zef> Статус: Elderman
Отредактировано 20.01.19 05:46  Количество правок: 1
<"чистая" ссылка>
Разобрался в чем дело: это хвост дообъектной эры. Компоновщик умеет предотвращать повторные объявления переменных при многократном инклюде хедера, но не умеет предотвращать повторную инициализацию. Потому можно объявлять в хедере только те объекты, у которых конструктор не имеет параметров. Хреново...
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach