LoginSignup
0
0

More than 5 years have passed since last update.

C++/CLIでThrustを使うとgenericキーワードでコンパイルできない問題

Last updated at Posted at 2012-10-27

Thrustにはgenericという名称の名前空間(例えば、thrust::detail::backend::generic)があって、これがC++/CLIのgenericキーワードと衝突している。
これが原因でC2059コンパイルエラーで、コンパイルできない。

どうやら既知のバグらしく、解決方法も書いてあった。つまり

error.cpp
#include <thrust/device_vector.h>

とThrustをインクルードしているところの前後

ok.cpp
#define generic THRUST_GENERIC
#include <thrust/device_vector.h>
#undef generic

と強制的に変えてやれば通る。

ただ、これ全部のヘッダー読み込み時にやってるとめんどい&忘れる(忘れてもコンパイルエラー起きるだけだけど)。解決策としては、

  1. 忘れないように努力する。
  2. C++/CLIのプロジェクトを分離して、Thrustを使う側は/clrを切ってネイティブでコンパイルする。ただしC++/CLI側のプロジェクトで呼び出すヘッダー側には依然として忘れないように前後に入れておかないと同じ事になる。
  3. thrustを読み込むだけのthrust_include.hppとか使って、その前後に入れておく。
  4. thrustのgitレポジトリをフォークして自分で直接書き換える。

上から順に挿入量が少なくなっていく分、最初の手間が増えます、たぶん。もっとスマートな解決方法ないかなぁ・・・。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0