Ах, зверства, которые могут совершать люди, творческие с CPP.
Прежде всего, вам нужно решить, насколько сильно вы хотите это сделать. В С ++. правильный способ справиться с подобной ситуацией состоит в том, чтобы создать коллекцию классов, представляющих места, где есть некоторая разница, а затем скрыть различия за интерфейсом, к которым у вас есть, скажем,
DifferentialEquationIntegrator <:
Runge-Kutta Integrator
Eulers Method Integrator
и т. Д. (Читайте <:
как стрелку наследования или «обеспечивает-удовлетворяет» - A <:
B означает «A предоставляет поведенческую спецификацию, которой удовлетворяет B».
По сути, это механический перевод от описанной вами схемы к «правильной» схеме, но он будет сложным и расширенным и будет стоить очень дорого, как будто вы переписываете код.
Если вы не хотите этого делать, вам нужно будет проанализировать существующий код. Я не знаком с текущим состоянием инструментов анализа кода, но есть много поставщиков, и не мало инструментов с открытым исходным кодом. Они могут немного помочь.
Да, другой вариант - использовать препроцессор для помощи. Обычно вы можете запускать препроцессор для кода, в результате чего генерируется код. Например, в gcc флаг -E делает это. Результат, по историческим причинам, содержит все новые строки, которые он имел (сделайте wc -l более понятным), поэтому, если вы хотите прочитать его, запустите вывод через indent (1) или что-то подобное.
Если вы сделаете это со всеми различными наборами флагов, вы узнаете много нового об общем коде через некоторые различия.
Четвертый вариант - создать свой собственный инструмент, который разбивает материал на фрагменты и помогает переупорядочить их. Это должно сделать хороший докторский проект для кого-то.