Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Static member variable in template, with multiple dlls

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.

like image 948
Igor Avatar asked Dec 29 '08 16:12

Igor


3 Answers

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

like image 119
balint.miklos Avatar answered Oct 23 '22 09:10

balint.miklos


The problem is that each different template instantiation is a different type with its own static variable that is not shared with other instances that have different template parameters. You could provide a non-template base class that contains the static variable.

like image 24
Judge Maygarden Avatar answered Oct 23 '22 08:10

Judge Maygarden


Create template specialization and then export the static members of the specialization.

like image 30
chappar Avatar answered Oct 23 '22 08:10

chappar