Есть ли способ, которым я могу эмулировать параметры шаблона значения C ++ в C #?
template<bool flag>
void Method()
{
// Do some work
if constexpr(flag)
{
// Do something specific
}
// Do some more work
}
, чтобы он генерировал две версии метода, которые можно вызывать так:
Method<false>();
Method<true>();
Это из соображений производительности, поэтому лучше не делать дополнительных вызовов внутри Method
.Method
является критичной для производительности частью, и ее называют миллиардами раз, поэтому важно выжать из нее каждый цикл ЦП.
С другой стороны, он имеет довольно сложную логику, поэтому я бы предпочел неу меня есть две копии.
Я думаю, что я мог бы сделать что-то с дженериками, но это не было бы лучшим вариантом для производительности.Так что теперь я могу думать только о том, чтобы создать для него какой-то генератор шаблонного кода.А может есть другие варианты?Может быть, возможно скомпилировать две версии метода с использованием Roslyn, чтобы он создавал две оптимизированные версии этого метода с конкретными аргументами?
void Method(bool flag)
{
// Do some work
if (flag)
{
// Do something specific
}
// Do some more work
}
Чтобы я мог скомпилировать его в:
void Method_false(false)
{
// Do some work
// Do some more work
}
и до:
void Method_true(true)
{
// Do some work
// Do something specific
// Do some more work
}
Возможно ли это вообще?