2017-10-03 4 views
1

私は、ソースも制御も変更もしないC++ライブラリを対象としたObjective-Cラッパーについて取り組んでいます。ヘッダーには、私は、トリガ、様々なコンパイラの警告をインポートするので、私は次の操作を行うために開始しました:#defineの中に#importする方法

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wreserved-id-macro" 
#pragma clang diagnostic ignored "-Wstrict-prototypes" 
#import "dll.hpp" 
#pragma clang diagnostic pop 

これは素晴らしい作品が、DRYそれを維持するために、私はこれらの輸入品のそれぞれのマクロを定義したいのですが無視された警告プラグマが組み込まれています(このようなヘッダーがいくつかあります)。

このように、各ファイルで、私はこのように一番上に電話をかけることができます。

ImportDllHpp() 

それは#define内から#importを呼び出して、しかし、そう簡単ではありません。私はかなり近づいて、this answerを使用してプラグマを動作させました。しかし、#importのための_Pragmaのような関数か、それを達成する別の方法がありますか?

これは私がこれまで持っているものです。

#define _stringify(a) #a 

#define ImportRarHpp() \ 
_Pragma(_stringify(clang diagnostic push)) \ 
_Pragma(_stringify(clang diagnostic ignored "-Wreserved-id-macro")) \ 
_Pragma(_stringify(clang diagnostic ignored "-Wstrict-prototypes")) \ 
#import "dll.hpp" 
_Pragma(_stringify(clang diagnostic pop)) 

答えて

2

あなたがこれを行うことができれば、私は非常に驚くだろう。

私はあなたが単に

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wreserved-id-macro" 
#pragma clang diagnostic ignored "-Wstrict-prototypes" 
#import "dll.hpp" 
#pragma clang diagnostic pop 

で構成されていmy-dll.hppのようなものdll.hppをインポートしたい人にはなりますだけでなく#import "my-dll.hpp"し、適切な警告をすることを道という名前の独自のファイルを定義するための最も簡単な解決策があることをお勧め抑圧される。

+0

代わりに '#include" my-dll.hpp "'を考えていましたが(私はまだC++ 17ではなく)、同じ考え方です。 '#pragma'sと'#import'をそれ自身のファイルに移動し、必要に応じてflleをインクルード/インポートします –

関連する問題