我正在尝试创建一个同步双端队列,它将在不同的操作系统上有不同的实现(例如,在Android,Windows,Linux等上的std :: mutexes和条件变量 - 在sync_deque_stl.cpp中实现;大中央调度在iOS / MacOS上 - 在sync_deque_gcd.cpp中实现)。我也使用gyp来生成我的项目。
我有一个sync_deque.hpp文件,其中包含以下定义:
template <class T> struct opaque_sync_deque;
int insert(opaque_sync_deque<class T>&, T& item);
...
然后,我使用gyp创建:
在.cpp文件中,我使用c ++类型别名(示例来自sync_deque_stl.cpp):
template<typename T>
using opaque_sync_deque = sync_deque_stl<T>;
这是有效的C ++ 11语法,但它与sync_deque.hpp中的forward声明冲突:
sync_deque_stl.cpp:29:1:错误:重新定义&#39; opaque_sync_deque&#39;如 使用opaque_sync_deque = sync_deque_stl;
的不同种类的符号
是否仍然可以保留此设置(.hpp中的不透明模板类型和函数签名由所有操作系统+实现在不同操作系统的单独.cpp文件中共享)仍然可以编译?我相信我可以在每个目录中使用单独的/ gcd和/ stl以及单独的sync _deque头文件,然后使用gyp选择正确的头文件,但只有一个sync_deque.hpp会更容易。任何帮助表示赞赏。