私は、このようなテンプレートクラスがあるとしますパラメータとしてキューを使用テンプレートクラス
template <class T>
class Queue
{
public:
static int Size;
};
template <class T> int Queue<T>::Size = 0;
私はD.dllに関数をエクスポート:
void ChangeQueueSize(Queue<int>& q)
{
q.Size = 100;
}
そして私はA.EXEで、このエクスポートされた関数を使用します。キュークラスは2 projecにクラステンプレートから生成されているので
Queue<int> q;
q.Size = 10;
ChangeQueueSize(q);
int updatedSize = q.Size;
を実際には、静的データメンバーだけでなく、コードのコピーも2つあります。
ChangeQueueSizeを呼び出すと、ここでキューサイズが実際に変更されることはなく、同じクラス名を持つ別のクラスの静的メンバーが更新されます。
この問題を解決するにはどうすればよいですか?
gccの弱いシンボルはこれに対処できますか?
ありがとうございます。
おかげで、私はあなたの方法に「輸出」キューので、dllファイルとクライアントの共有コードとともに(のdllexport)/ declspec(dllimportのを)declspec使用することができます。 Linuxでこれをどのように実装するか考えていますか?そのような仕組みがないようです。 –
Linuxでは 'declspec'は必要ありません。 Linux上で何もしない、プラットフォーム条件付きマクロにしてください。 –
私はまだそれを試していなかったが、その後が、SOと実行がキューの独自のコピーを持って、あなたは本当にそれが正常に動作と思いますか? –