Я работаю в C#, и у меня есть задача, которую я бы разрешил на C++, используя класс шаблона. Однако я не могу использовать генераторы C#, потому что типы, переданные в шаблон, не наследуются от одного базового класса или не реализуют общий интерфейс.Генерация кода компиляции по требованию в C#
Сейчас я использую T4 для генерации отдельного кода для каждого используемого типа, но я хочу, чтобы это происходило автоматически во время компиляции на основе кода, который я написал, вместо ручного ведения списка в текстовом шаблоне файл.
Есть ли синтаксис в наборе инструментов преобразования шаблонов текста, который фактически будет работать так, как делают шаблоны на C++?
Edit:
Допустим, у меня есть этот файл Tt:
<# string[] typeNameStrings = new string[2] {"Vector2d", "Vector3d"};
foreach (string s in substitutions)
{ #>
public class SumCalculator<#= s #>
{
public <#= s #> sum;
public SumCalculator<#= s #>(<#= s #> a, <#= s #> b)
{
sum = a + b;
}
}
<# } #>
Я не хочу, чтобы сохранить массив typeNameStrings
, а затем использовать созданные классы SumCalculatorVector2d
, SumCalculatorVector3d
и т.д. Вместо этого, я хотите как можно ближе подойти к возможностям шаблонов C++ (т.е. SumCalculator<WhateverClass>
). Как мне это сделать?
Generics - это не шаблоны. Вы как-то наткнулись на это. Код поможет здесь. Я имею в виду, что вы пытаетесь написать C++ в C#, и, вероятно, есть несколько вариантов выбора, которые можно сделать с точки зрения того, как вы это делаете. Трудно сказать, без особых подробностей. –
Спасибо за ваши предложения. Я добавил пример кода. –
Вы заявили, что классы не имеют общего интерфейса, но вы предполагаете, что у них есть оператор '+'. Это звучит как общий интерфейс для меня. В C# или C++ я ожидал, что эти вещи будут храниться в контейнере и на них будет функтор, а не на тот подход, который вы указываете. Возможно, я слишком ограничен в своих методах, чтобы помочь здесь. Удачи. –