我有一个类Foo
,我不直接实现它,而是包装外部库(例如FooXternal1
或FooXternal2
)我见过的一种方法是使用预处理器指令作为
#include "config.h"
#include "foo.h"
#ifdef _FOOXTERNAL1_WRAPPER_
//implementation of class Foo using FooXternal1
#endif
#ifdef _FOOXTERNAL2_WRAPPER_
//implementation of class Foo using FooXternal2
#endif
和 aconfig.h
用于定义这些预处理器标志(_FOOXTERNAL1_WRAPPER_
和_FOOEXTERNAL2_WRAPPER_
)。我的印象是 C++ 程序员社区不赞成这种做法,因为它使用预处理器指令,难以调试等。此外,它不允许两种实现并行存在。
我考虑过创建Foo
一个基类并从它继承,以允许两个实现彼此并行存在。但是我遇到了两个问题:
- 纯虚函数:
cannot instatiate an object of type 'Foo'
,我在使用过程中需要的。 - 虚函数冒着运行没有(正确)实现的对象的风险。
我错过了什么吗?有没有更清洁的方法来做到这一点?
编辑:总而言之,有 3(.5?!) 种包装方法 - 2(.5) 由 icepack 给出,最后一种由 Sergey 给出 1- 使用工厂方法 2- 使用预处理器指令 2.5- 使用 makefile 或IDE 有效地完成预处理器指令的工作 3.5- 使用 Sergay 建议的模板
我正在开发一个资源有限的嵌入式系统,我决定使用template<enum = default_library>
模板专业化。便于后期用户理解;至少我是这么认为的