
I discussed Joaquin's solution with John, in a private mail. John told me that Joaquin's solution is sound, but depends on Boost.Interprocess. It is a very clever solution. And it is the first solution I have ever seen to this problem. But to me it seems undesirable to have a light-weight library, such as the floating point utilities, depend on a heavy-weight library, such as Boost.Interprocess. So I think that I'll refrain from adding manipulators to the facet classes in the floating point utilities library. It is a bit alarming that other Boost libraries have defined manipulators using methods that will fail when passing iostream objects between different DLL's on Windows. --Johan JOAQUIN M. LOPEZ MUÑOZ wrote:
Hi John,
De: boost-bounces@lists.boost.org [boost-bounces@lists.boost.org] En nombre de John Maddock [john@johnmaddock.co.uk] Enviado el: domingo, 02 de marzo de 2008 14:12 Para: Boost mailing list; rade@maths.lth.se Asunto: [boost] call_once, headers and shared libraries
This came up in the floating point utilities review without a good answer, but it's a general problem that's in need of one, so let me try again....
Suppose we have some global data that needs to be initialised, the obvious answer is to use boost::call_once to ensure that it gets initialised exactly once. But... what happens if this is used in a header to initialise some static variable inside a template instance, and that template is used in more than one shared library/dll? At least on Windows I'm assuming that each dll gets it's own instance of the template, and we end up with two different versions of the static data with unpleasant results. Other than "don't do that", does anyone have a design or usage pattern that sidesteps this issue?
Boost.Flyweight's intemodule_holder is designed to solve precisely this issue. More info on this component at:
http://svn.boost.org/svn/boost/sandbox/flyweight/libs/flyweight/doc/tutorial...
Component code:
http://svn.boost.org/svn/boost/sandbox/flyweight/boost/flyweight/intermodule...
svn.boost.org seems to be down at the moment. You can download a Boost.Flyweight package from
http://www.boost-consulting.com/vault/index.php?&direction=0&order=&directory=Patterns
Best,
Joaquín M López Muñoz Telefónica, Investigación y Desarrollo _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost