0

OS ごとに異なる実装を持つ同期両端キューを作成しようとしています (たとえば、std:: Android、Windows、Linux などのミューテックスと条件変数 - sync_deque_stl.cpp での実装、iOS/ でのグランド セントラル ディスパッチ)。 MacOS - sync_deque_gcd.cpp での実装)。また、gyp を使用してプロジェクトを生成しています。

  1. 次の定義を持つ sync_deque.hpp ファイルがあります。

    template <class T> struct opaque_sync_deque;
    int insert(opaque_sync_deque<class T>&, T& item);
    ...
    
  2. 次に、gyp を使用して以下を作成します。

    • sync_deque_gcd.cpp を含める MacOS/iOS 上の Xcode プロジェクト。ただし、sync_deque_stl.cpp は含めません。
    • sync_deque_stl.cpp を含めるが、sync_deque_gcd.cpp を含めない Windows 上の Visual Studio プロジェクト
    • (基本的に、各OSはsync_dequeの独自の実装.cppを取得しますが、ヘッダーファイルはOS間で共通です)
  3. .cpp ファイルでは、c++ 型のエイリアシングを使用します (例は sync_deque_stl.cpp から取得):

    template<typename T>
    using opaque_sync_deque = sync_deque_stl<T>;
    

これは有効な C++11 構文ですが、 sync_deque.hpp の前方宣言と競合します。

sync_deque_stl.cpp:29:1: エラー: opaque_sync_deque = sync_deque_stl を使用して、別の種類のシンボルとして「opaque_sync_deque」を再定義しました。

このセットアップ (すべての OS で共有される .hpp 内の不透明なテンプレート タイプと関数シグネチャ + 異なる OS 用の個別の .cpp ファイル内の実装) を維持し、コンパイルすることは可能ですか? /gcd と /stl を個別に作成し、各ディレクトリに個別の sync _deque ヘッダー ファイルを作成し、gyp を使用して適切なヘッダー ファイルを選択することもできますが、sync_deque.hpp を 1 つだけ作成する方が簡単です。どんな助けでも大歓迎です。

4

0 に答える 0