C ++ отображает тип в заголовочный файл

В настоящее время я занимаюсь разработкой простого языка программирования для простого создания проектов C ++. Он позволяет вводить некоторый короткий C ++ -подобный код и автоматически генерирует файлы .h и .cpp.

Мне нужен какой-то способ сопоставить тип, например из стандартной библиотеки, в соответствующий заголовочный файл. Это позволяет просто использовать тип в моем языке и автоматически определять, какие заголовки включать в сгенерированный код.

Вот пример языка, который есть сейчас:

class Car {
std::string print()

members:
int i, j
std::array<Wheel, 4> wheels
}

При обработке этого кода я нахожу типы std::string а также std::array которые должны быть сопоставлены с их заголовочными файлами. Как я могу добиться этого сопоставления?

Может быть, база данных общедоступна? Конечно, я не хочу анализировать все заголовки самостоятельно (что, как я полагаю, заключается в том, как это делают IDE).

Помимо поддержки только стандартной библиотеки, конечно, было бы полезно иметь возможность поддерживать и другие библиотеки, но это только вторичная цель.

2

Решение

Ну, есть несколько отличных ссылок, которые вы можете использовать для создания своей собственной базы данных. Поскольку стандарты меняются медленно, вы можете создать карту для них, используя ссылки. Вот хороший C ++ ссылка

Трудно просто искать в заголовочных файлах, поскольку они обычно создаются с использованием внутренних битов, которые вы не хотите использовать в своем коде, и вы не можете различить их.

Если бы я строил это, я бы построил базовую карту, используя стандартную библиотечную ссылку, а не анализируя файлы заголовков; Например, в примере автомобиля выше, вы должны #include <string> право?

Если вы должны были проанализировать файл заголовка <string> для данного компилятора вы можете обнаружить, что он состоит только из внутренних битов, которые, в свою очередь, включают другие файлы;

В g ++ версии 4.6 <string> выглядит так:

// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
// 2005, 2006, 2007, 2009, 2010, 2011
// Free Software Foundation, Inc.
// GPL version 3.1 or later ... etc...

#ifndef _GLIBCXX_STRING
#define _GLIBCXX_STRING 1

#pragma GCC system_header

#include <bits/c++config.h>
#include <bits/stringfwd.h>
#include <bits/char_traits.h>  // NB: In turn includes stl_algobase.h
#include <bits/allocator.h>
#include <bits/cpp_type_traits.h>
#include <bits/localefwd.h>    // For operators >>, <<, and getline.
#include <bits/ostream_insert.h>
#include <bits/stl_iterator_base_types.h>
#include <bits/stl_iterator_base_funcs.h>
#include <bits/stl_iterator.h>
#include <bits/stl_function.h> // For less
#include <ext/numeric_traits.h>
#include <bits/stl_algobase.h>
#include <bits/range_access.h>
#include <bits/basic_string.h>
#include <bits/basic_string.tcc>

#endif /* _GLIBCXX_STRING */

Проблема сейчас становится очевидной. Например, это <string> канонический для std::ios_base ?
Много думать, у меня могут быть другие мысли об этом позже.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]