Я пишу программу, которая должна быть кросс-платформенной; как таковой, он будет поддерживать несколько реализаций определенных операций. Моей первой идеей было написать иерархию классов с общим интерфейсом, может быть, абстрактную фабрику для каждой платформы.
class Operation {
DoOperation() = 0;
}
class OperationPlatform1 : public Operation {
DoOperation();
}
class OperationPlatform2 : public Operation {
DoOperation();
}
#ifdef USING_PLATFORM1
Operation *op = new OperationPlatform1;
#endif
Однако я понял, что реализация, которая будет использоваться, известна во время компиляции. Я попытался придумать, как реализовать это с помощью статического полиморфизма, после чего понял, что тоже могу написать что-то в этом духе:
class OperationPlatform1 {
DoOperation();
}
class OperationPlatform2 {
DoOperation();
}
#ifdef USING_PLATFORM1
typedef OperationPlatform1 Operation;
#endif
Operation op;
Каков хороший способ абстрагировать несколько реализаций, из которых только одна будет выбрана во время компиляции? Меня также интересует производительность, поэтому я бы не хотел использовать виртуальные методы, если в этом нет необходимости.