スレッド セーフ キュー用の管理されていないテンプレート クラスがあります。
template<class T>
public class TSQueue {...}
そしてプロデューサークラス:
public ref class Producer
{
Producer(TSQueue<int>* Q) {...}
};
プロデューサーは次のように使用されます。
Producer^ p = gcnew Producer(new TSQueue<int>());
どちらも 1 つの C++/CLI DLL Producer.DLL で定義されています。
Producerがインスタンス化され、この DLL 内でTSQueue< int >*が提供される場合、コンパイルと実行に問題はありません。
しかし、別の C++/CLI dll で TSQueue< int >* を使用して Producer をインスタンス化しようとすると、次のコンパイラ エラーが発生します。
Error 23 error C2664: 'Producer(TSQueue<int>*)' : cannot convert parameter 1 from 'TSQueue<T> *' to 'TSQueue<int> *'
あたかもコンパイラが Producer コンストラクタに提供する QI のタイプを判別できないかのように。
Producer.DLL への参照を追加しました。
この問題を克服する方法を知っている人はいますか。