Инструмент генерации кода, ориентированный на C ++ и C # - PullRequest
1 голос
/ 12 мая 2009

У меня есть набор приложений, которые создаются с использованием комбинации 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 ]

7 голосов
/ 12 мая 2009

Для любой проблемы генерации кода я бы внимательно посмотрел на T4 (функциональность шаблонов текста, которая появилась в VS.NET 2008).

Хорошее место для начала с Т4 это ...

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

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

Альтернатива - использовать API CodeDom. Это имеет два CodeDomProviders (CppCodeProvider и CSharpCodeProvider), которые могут предназначаться для каждого языка.

Для получения дополнительной информации:

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

Есть ссылки на SO:

T4 против CodeDom против Осло Можно ли динамически компилировать и выполнять фрагменты кода C #?

2 голосов
/ 12 мая 2009

Вы также можете исследовать CodeSmith . Вы можете писать шаблоны на языке asp.net, чтобы генерировать любой код.

2 голосов
/ 12 мая 2009

Google Protobuf может быть одним из лучших решений, доступных бесплатно.

См. языковую страницу .

2 голосов
/ 12 мая 2009

cog - это инструмент генерации кода, который позволяет встраивать код Python для генерации кода в файлы C ++ / C #. Его преимущество в том, что им действительно легко пользоваться, особенно если вы уже знаете Python.

1 голос
/ 16 августа 2009

Я настоятельно рекомендую использовать Ruby в качестве инструмента для генерации кода.

Легко создавать внутренние DSL в Ruby и генерировать код из него.

Я использую Ruby каждый день для генерации кода на C ++ и C #. Это значительно сократило время, необходимое для написания скучной и утомительной части приложения.

1 голос
/ 16 мая 2009

Я сделал это несколько раз, чтобы определить свой собственный язык LL и проанализировать его, и заставить его генерировать определения классов на любом языке, ИЛИ записывать определения классов на одном целевом языке, а затем анализировать их для генерации другой язык.

1 голос
/ 12 мая 2009

.Net-классы для выдачи исходного кода, например, метод GenerateCodeFromCompileUnit базового класса CodeDomProvider, могут использоваться для выдачи исходного кода на разных языках из одного определения: например, есть CppCodeProvider а также CSharpCodeProvider. Это может быть только C ++, но вы сказали «относительно просто».

...