有没有C++ "Code Generator"?
Is there any C++ "Code Generator" out there?
我一直在阅读有关Meta II的信息,这让我想知道是否有C++"代码生成器"。我寻找了一个C++元编译器,但这不是我所指的。我所指的类似于宏在汇编中的工作方式。
澄清一下,我不是在谈论模板或定义。我也不是在谈论使用 IDE 为我生成代码。这不是一个理论问题,它对我来说非常有用。我正在从事需要访问代码的项目,我需要它是"我的"。使用 STL 中的函数会使事情变得更糟很多次。当算法首次实现时,它还将在琐碎的任务上节省大量时间。
我说的是一个包含模板化代码片段数据库的工具,可以使用宏或可视化 GUI 插入这些代码片段。这样,可以在基本框架设置后进一步操作代码。
示例:我有一个对象队列。我想在该队列中找到某种类型的对象。可以插入一个代码片段,该代码片段将自动生成一个函数(成员,静态,友元...(,该函数将遍历我的队列并寻找某些条件。与 IDE 不同,我不会提供参数或返回类型等详细信息。只会生成非常基本的。也许在这种情况下是对成员的引用。它将为我提供一个原型和一个基本的函数定义。进一步的定制将需要手动完成。
在C++中实现算法时,您甚至在完成任何事情之前都必须将其转换为一些技术细节。在软件工程中,这些技术细节起着重要作用,而在简单的算法开发中,它们却没有(KIS(。
更多详情:
添加示例。对不起,如果我没有说清楚。我不知道用什么术语来描述我试图描述的某些功能(英语不是我的第一语言(。我应该举一个例子。
这是主要思想:我有一个算法和它的伪代码。我正在寻找的工具将减少首次实现该伪代码的时间。只需几行或 GUI,编码C++的许多琐碎部分将自动完成(如缩进、创建用于遍历的 for 循环、声明迭代器和临时变量等......设计考虑将以标准方式完成(例如:返回指针或引用,使用迭代器或索引等(。图书馆将自动包括在内。生成的类、函数原型和函数定义将以标准方式在代码中分发。我并没有特别限制我的描述,但这是我在此类工具中寻找的东西。
下面是一个快速示例:
生成公式:
我想出了某种语言/宏作为示例。但任何类似的东西都可以。图例:# - 表示它是一个变量
class Time(int #day, string #name) //Create `class` Time with `int` day and string name
getter getName #name //Create a member function to get name
main//Main
vector Time #vec //Create vector of Time vec
input int #var1 //Input `int`
find #var1 #day #vec //Find a member with day equal to var1 in vec
printVector #vec //Call print function for vector
function printVector(vector #par1) //Create void function printVector() to output names of Time instances
output #par1 //Print member variables from vector
生成的代码:
自动变量、临时变量、迭代器或任何其他设计注意事项的决策已经预定义。上面至少需要一些思考才能想出"语言",而我已经写了很多次下面的代码,我什至没有"思考"。尽管如此,编写下面的代码还是花费了更长的时间(而且它更容易包含难以发现的简单错误(。
#include <string>
#include <iostream>
#include <vector>
using namespace std;
//Create `class` Time with `int` day and string name
class Time
{
int day;
string name;
public:
Time() {};
Time(int par1, string par2) {day = par1; name = par2;}
string getName() const {return name;} //Create a member function to get name
};
template<typename T> void printVector(vector<T>);
//Main
int main()
{
vector<Time> vec; //Create vector of Time vec
int var1; cin>>var1; cin.ignore(); //Input `int` var1 (Default using iostream)
//Find a member with day equal to var1 in vec (First found by default)
vector<Time>::iterator it1; bool found = false;
for(it1 = vec.begin(); (it1 != vec.end() && !found); found = (it1->day == var1), it1++);
printVector(vec); //Call printVector
return 0;
}
//Create void function printVector() to output name from vector
template<typename T>
void printVector(vector<T> par1)
{
//Print member variables of instances from vector
vector<Time>::iterator it1;
for(it1 = par1.begin(); it1 != par1.end(); it1++)
cout<<it1->day<<" "<<it1->name; //Would cause an error since can't access, but generator doesn't know it!
}
希望我能更好地澄清我正在寻找的工具类型。我真的不明白为什么有些人对我想要的东西如此沮丧。我完全不同意这是没有用的。只要使用的语法保持在基本水平,我不明白为什么会有那么多兼容性问题。我正在考虑自己使用 GUI 来做。但是由于这是一个如此简单的概念(没有什么比元编译器更接近(,我相信已经有这样的东西了。
你不太可能找到完全符合你要求的东西 - 代码重复(这是你提出的就地扩展模板方法将创建的(通常被认为是一件坏事,因为它降低了代码的可理解性,因为它增加了复制错误代码的可能性。通常建议使用内置(非扩展(模板(和 STL( C++ - 如果您遇到此类问题,您应该更清楚您的问题是什么,以便我们也可以提供帮助。
但是,如果您绝对必须具有快捷方式模板,Eclipse 支持这样的东西。看看这个关于 Eclipse 代码模板的教程。请注意,这些模板是纯字符串替换,并且受到一定限制。我强烈建议不要在这样的模板中包含任何类型的复杂逻辑。
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- Visual Studio Code - C++ Debugger 無法啟動
- Visual Studio Code "undefined reference to `WinMain@16'"
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- std::to_string - 'to_string' 不是 'std' 的成员 - Visual Studio Code 1.42.0
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- C++新手,想知道如何使用VS code 2019播放音频文件
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 如何在Visual Studio Code中重命名我的a.exe文件?
- C++ Visual Studio Code 的设置不起作用
- 以某种方式告诉编译器"Do not process line of code"
- 在VS Code中编译C / C ++时如何禁用自动创建EXE文件?
- 将Qt与Visual Studio Code(Windows)一起使用
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- 将Visual Studio Code路径设置为.clang_format文件
- C++ Code 在 for 循环期间不会累积变量中的总和,仅提供最终迭代值
- 有没有C++ "Code Generator"?