Static member variable in template, with multiple dlls

Igor Oks picture Igor Oks · Dec 29, 2008 · Viewed 7.4k times · Source

My code is built to multiple .dll files, and I have a template class that has a static member variable.

I want the same instance of this static member variable to be available in all dlls, but it doesn't work: I see different instance (different value) in each of them.

When I don't use templates, there is no problem: initialize the static member in one of the source files, and use __declspec(dllexport) and __declspec(dllimport) directives on the class. But it doesn't work with templates. Is there any way to make it work?

I saw some proposed solutions that use "extern", but I think I can't use it because my code is supposed to work with visual studio 2002 and 2005.

Thank you.

Clarification: I want to have a different instance of static variable per each different type of template instantiation. But if I instantiate the template with the same type in 2 different dlls, I want to have the same variable in the both of them.

Answer

balint.miklos picture balint.miklos · Jun 30, 2009

There exists the following solution, as well:

  • in the library: explicitly instantiate some template specialization and share them with dllexport
  • in the main program:
    • if the specialization is available it will be used from the library
    • if the specialization is not available it is compiled in the main program

The desciption in detail how you can do this:

Anteru's blog Explicit template instantiation