我目前正在开发一种简单的编程语言,可以轻松创建C ++项目。它允许您输入一些简短的C ++代码并自动生成.h和.cpp文件。
我需要一些方法来映射类型,例如从标准库到其相应的头文件。这样就可以只使用我的语言中的类型,并自动推断出要包含在生成的代码中的标题。
这是现在的语言示例:
class Car {
std::string print()
members:
int i, j
std::array<Wheel, 4> wheels
}
处理此代码时,我发现需要映射到其头文件的类型std::string
和std::array
。 如何实现此映射?
是否可以公开提供数据库?我当然不想自己解析所有标题(我假设IDE是如何做的)。
除了支持标准库之外,能够支持其他库当然也很有用,但这只是次要目标。
答案 0 :(得分:1)
有一些很好的参考资料可以用来构建自己的数据库。由于标准变化缓慢,您可以使用引用为它们生成映射。这是一个很好的c++ reference
很难简单地在头文件中搜索,因为它们通常是使用您不希望在代码中使用的后端位构建的,并且您无法区分它们。
如果我要构建它,我将使用标准库引用构建基本映射,而不是通过头文件解析;例如,在上面的Car示例中,您应#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
?
有很多想法,我稍后可能会有其他一些想法。