Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » extract interface in C++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

EndlessWinter

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если программа, с помощью которой можно выделить интерфейс (то есть множество public методов) из .h файла

Всего записей: 123 | Зарегистр. 08-04-2003 | Отправлено: 08:07 24-06-2004
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mein Gott, это же элементарно. Знание синтаксиса + желание программировать. Это даже не автомат с магазинной памятью (навскидку). Если есть потребность, могу такую прогу написать.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 16:32 26-06-2004
EndlessWinter

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ага, элментарно. Это я только на вид так.
Я согласен, что можно написать, но уйдет куча времени. Думал, может кто встречался с готовой программой. Там у меня еще заморочки с параметрами по умолчанию будут, макросами и т.п. К тому же исходники из Visual C++, со всякими DYNCREATE и т.п. Писать просить не буду, лучше уж тогда сам.

Всего записей: 123 | Зарегистр. 08-04-2003 | Отправлено: 11:37 28-06-2004
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну а причем тут все эти макросы и заморочки? Просто едем по тексту. Встретили слово class - заметим это. Встретили public: - перечисляем имена функций. И фиг со всеми этими модификаторами вызова. Просто грамотно построить разбор. Как только закончился public или встретили } как конец класса, так и все.  
 
По-моему, тут нет ничего сложного.
 
А можно перейти на Java - там Javadoc есть. Или использовать doxygen.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 16:04 28-06-2004
redp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
насчет из своей проги - не знаю
а вот если лень писать полный парзер - можно сделать такую хитрую штуку:
берутся сорцы интересующих классов
компилятца (например Visual C++), при этом можно попросить компилятор создать PDB файл
дальше беретца PDBDump (http://sourceforge.net/projects/pdbdump)
точитца под свои цели
и с его помощью можно извлечь из сгенерированного компилятором pdb все что угодно - хоть public методы, хоть vtbls классов

----------
помни - ты с потрохами принадлежишь государству

Всего записей: 514 | Зарегистр. 16-06-2003 | Отправлено: 18:43 28-06-2004
vndovr

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TheChampion

Цитата:
Просто грамотно построить разбор. Как только закончился public или встретили } как конец класса


Код:
 
class T
{
public:
  T( ) {}
  ~T() {}
};

Уже на таком простом примере такое "грамотно"  работать не будет...

Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 18:48 28-06-2004 | Исправлено: vndovr, 18:49 28-06-2004
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
To vndover:
 
Дорогой сэр,
 
ПРОЧИТАЙТЕ ТО, ЧТО Я ПИСАЛ ВНИМАТЕЛЬНО:
 
встретили } как конец класса,
 
а не просто встретили. Не считайте идиотами всех вокруг вас.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 10:38 29-06-2004
vndovr

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TheChampion
Да, невнимательность - порок. Беру свои слова обратно.  
 
Но раз уж

Цитата:
 
Mein Gott, это же элементарно. Знание синтаксиса + желание программировать. Это даже не автомат с магазинной памятью (навскидку). По-моему, тут нет ничего сложного.  
 

нельзя ли это как-то увидеть...

Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 12:58 29-06-2004
EndlessWinter

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как, например, насчет таких классов:
 
class A : public B {
private:
void foo1();
public:
void foo2();
private:
void foo3();
public:
MACROS1(A);
}
 
или
class MACROS2(B) A : public B {
public:
void foo1();
void foo2();
}
 
?

Всего записей: 123 | Зарегистр. 08-04-2003 | Отправлено: 06:08 30-06-2004
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну что же, господа... Сформулируйте задачу по возможности поточнее, а я ее решу.  
 
Эти макросы где-то описаны. Один из варантов - обработать стандартным препроцессором, который раскроет макросы, а уж потом мы беремся за дело.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 08:20 30-06-2004
vndovr

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Из набора header-ов выделить все типы, которые будут доступны приложению при подключении этих файлов.  
Вывод интерфейсов, к примеру, в следующем виде:
class XXX::XXX::XXX
{
// список методов  
  возвр.зн.  название(список аргументов);
};
....
Для примера можешь посмотреть что доступно а что нет:

Код:
 
#define genAccessors(name, type)\
   void Set##name(const type& X) {name = X;}\
      type Get##name() {return name;}
 
class TEST
{
  int Ops;
public:
    genAccessors(Ops, int)
};
 
#define __begin_class_decl {
#define __end_class_decl };
#define __interface public:
 
#define HRESULT char
 
#ifdef __DEBUG
class LS
{
public:
  HRESULT something1();
};
#else
class LS
{
public:
  HRESULT something2();
};
#endif
 
class Sample
__begin_class_decl
__interface
  void sample();
__end_class_decl
 
class T
{
private:
  class G{};
public:
  class C
  {
    public:
      class D
      {
        public:
      } _do() {return D();}
  }  _do() {
    class P
    {
      public:
        void just_for_fun() {}
    };
    class X : public C
    {
    };
    return X();
  }
};
 

Успехов

Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 12:28 30-06-2004
joktar

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть интересный порт GCC под названием gccxml,
он после разбора все метаданные сбрасывает в xml-файлы более-менее понятного формата.

Всего записей: 131 | Зарегистр. 24-10-2004 | Отправлено: 08:51 06-09-2005
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » extract interface in C++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru