我一直在阅读关于Meta II的内容,这让我想知道是否有一个C++"代码生成器".我找了一个C++ Metacompiler,但这并不是我所说的.我指的是类似于宏在Assembly中的工作方式.
澄清一点,我不是在谈论模板或定义.我也不是在谈论使用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
Run Code Online (Sandbox Code Playgroud)
自动变量,临时变量,迭代器或任何其他设计考虑因素的决策已经预定义.上面至少需要一些思考来提出"语言",而我已经多次编写下面的代码,我甚至没有"思考".尽管如此,编写下面的代码需要花费更长的时间(并且它更容易包含难以发现的简单错误).
#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!
}
Run Code Online (Sandbox Code Playgroud)
希望我更好地澄清了我正在寻找的工具类型.我真的不明白为什么有些人对我想要的东西感到沮丧.我完全不同意它会毫无用处.只要使用的语法保持在基本级别,我就不明白为什么会出现这么多兼容性问题.我正在考虑用GUI自己做.但由于它是一个如此简单的概念(没有什么比元编译器更接近的东西),我相信那里已经有类似的东西了.
您不太可能找到与您要求完全相同的东西 - 代码重复(这是您提出的扩展模板创建的方法)通常被认为是一件坏事,因为它降低了代码的可理解性,并且因为它提高了复制错误代码的可能性.通常建议使用C++内置(非扩展)模板(和STL) - 如果你遇到这样的问题,你应该更清楚你的问题是什么,所以我们也可能在那里提供帮助.
但是,如果您必须拥有快捷方式模板,则Eclipse支持此类操作.看一下关于Eclipse代码模板的本教程.请注意,这些模板是纯字符串替换,并且有些限制.我强烈建议不要在这样的模板中包含任何类型的复杂逻辑.
| 归档时间: |
|
| 查看次数: |
2776 次 |
| 最近记录: |