Мне действительно нравится немакро-способ обработки этого, он позволяет одной сборке библиотеки обслуживать много версий. Это неизбежно увеличит размер библиотеки (из-за присутствия большего количества версий некоторых классов), но есть одно предостережение: компилятор, скорее всего, сообщит полную квалификацию пространства имен классов, делая пользователя вашей библиотеки, который этого не делает. знать о вашей нестандартной схеме управления версиями очень запутано.
Если подумать, я также не вижу смысла в предоставлении двух версий одной и той же вещи в одной сборке библиотеки, за исключением случаев, когда задействованы разные процессоры / архитектуры, но я не думаю, что это то, что вы получаете в. Хранение старых версий классов не является умным, люди никогда не переключатся на более новые, если им это не нужно, и если что-то (наполовину) устареет, вы удалите то, что было «частью библиотеки». так сказать.