针对C ++和C#的代码生成工具

时间:2009-05-12 13:54:24

标签: c# c++ code-generation

我有一组使用C#和C ++组合构建的应用程序。我们在两种语言之间有一组共享对象,而不是在每种语言中单独定义每个语言,我宁愿使用代码生成工具。理想情况下,这样的工具将是FOSS,尽管这不是绝对的要求。尽管从基类继承,接口的实现,其他对象类型的包含以及其他对象类型的集合,对象本身也相对简单。

C ++目标环境是Visual C ++ 2008。

有没有人对可以处理此类任务的工具有任何建议?

示例代码:

public class Tax 
{ 
private static Dictionary<string, double> _TaxRates; 
public Dictionary<string,double> TaxRates { get { return _TaxRates; } }
}

7 个答案:

答案 0 :(得分:7)

对于任何代码生成问题,我都会仔细研究T4(VS.NET 2008中出现的文本模板功能)。

从T4开始的好地方是......

http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

您需要使用不同的C ++和C#模板,并从其他元数据中驱动代码生成。

另一种方法是使用CodeDom API。这有两个可以定位每种语言的CodeDomProviders(CppCodeProvider和CSharpCodeProvider)。

了解更多信息:

http://msdn.microsoft.com/en-us/library/system.codedom.compiler.aspx

SO上有相关链接:

T4 vs CodeDom vs Oslo Is it possible to dynamically compile and execute C# code fragments?

答案 1 :(得分:2)

cog是一个代码生成工具,可以让你在C ++ / C#文件中嵌入代码生成python代码。它的优点是它非常易于使用,特别是如果你已经知道python。

答案 2 :(得分:2)

Google Protobuf可能是免费提供的最佳解决方案之一。

请参阅language page

答案 3 :(得分:2)

您还可以调查CodeSmith。你可以用asp.net这样的语言编写模板来生成任何类型的代码。

答案 4 :(得分:1)

用于发出源代码的.Net类,例如GenerateCodeFromCompileUnit基类的CodeDomProvider方法,可用于从单个定义中以各种语言发出源代码:例如,有CppCodeProvider以及CSharpCodeProvider。{{1}}。它可能只是托管C ++,但你确实说“相对简单”。

答案 5 :(得分:1)

我多次这样做的方法是定义我自己的LL语言并对其进行解析,让它以任一语言生成类定义,或者用一种目标语言编写类定义,然后解析它们以生成其他语言。

答案 6 :(得分:1)

我强烈建议使用Ruby作为代码生成器工具。

很容易在Ruby中创建内部DSL并从中生成代码。

我每天都使用Ruby来生成C ++和C#代码。它大大减少了编写应用程序枯燥乏味的部分所需的时间。