Я работал с quickfix и Visual Studio и вижу, что могу инициализировать экземпляр FIX42 :: NewOrderSingle из FIX41 :: NewOrderSingle без проблем компилятора или даже проблем во время выполнения. То же самое верно, когда у меня есть метод с параметром, таким как FIX :: Message, и я могу передать в FIX41 :: NewOrderSingle или FIX42 :: NewOrderSingle без проблем.
Это позволяет мне не создавать перегруженные методы для каждого параметра типа.
Это хорошая вещь, чтобы сделать? Или я напрашиваюсь на неприятности?
Спасибо
Вы можете передать FIX :: Message в качестве параметра, но вы не сможете использовать сгенерированные средства доступа полевых типов. Это не обязательно плохо, если вам нужна гибкость больше, чем безопасность типов, но это означает, что вы должны быть более осторожны в отношении доступа к данным сообщения и их интерпретации.
Конструктор FIX :: Message, который принимает другое FIX :: Message, копирует внутреннюю FieldMap исходного сообщения из одного сообщения в другое. Это, вероятно, будет работать достаточно хорошо для двух NewOrderSingles из разных версий FIX, но будьте осторожны с полями, которые изменили свой тип между версиями или не существуют ни в одной версии, ни в другой. Вы можете реально построить любой сгенерированное сообщение с использованием конструктора, который принимает любой другой подтип FIX :: Message. Однако, если сообщения не связаны, это, вероятно, бесполезно, поскольку поля, если исходные сообщения могут быть недопустимыми для целевого сообщения, хотя это не приведет к ошибке во время компиляции или во время выполнения.
Других решений пока нет …