Я анализировал некоторый код и увидел то, чего раньше не видел, и мне было интересно, хорошо это или плохо, и нормально ли это.
По существу, существует заголовочный файл с определением класса для класса с кучей (около 90) чисто виртуальных функций.Существует много этих виртуальных функций, поэтому все они помещаются в отдельный файл и затем включаются в определение класса следующим образом:
Foo.h
class Foo
{
public:
virtual ~Foo() {};
#define FOO_VIRTUAL_IMPL = 0
#include "Foo_prototypes.h"
};
Foo_prototypes.h
#if ! defined(FOO_VIRTUAL_IMPL)
# define FOO_VIRTUAL_IMPL
#endif
virtual void doSomething() FOO_VIRTUAL_IMPL;
virtual void doSomethingElse() FOO_VIRTUAL_IMPL;
Также
Является ли использование макроса определения таким же распространенным (т. Е. Позволяет использовать один и тот же файл включения для чисто виртуальных и обычных виртуальных функций)?Используются ли такие вещи часто или просто для маленьких хаков, чтобы сэкономить немного времени / усилий?
Полагаю, из-за этих вещей код казался мне менее читабельным, но это может быть просто потому, что я не привык к этим трюкам, и как только я к ним привыкну, я лучше подготовлюсь к чтению такого рода кода..
Код, о котором идет речь, - это API C ++ Interactive Brokers, если кто-нибудь захочет увидеть его в контексте.Соответствующие файлы: EWrapper.h и TestCppClient.h и EWrapper_prototypes.h.