Единственный известный мне способ гарантировать, что у вас не возникнет проблем с потоками незащищенных ресурсов, таких как ваш "static Dog"
, - это сделать требование, чтобы все они были созданы до . создано.
Это может быть так же просто, как просто документировать, что они должны вызвать функцию MyInit()
в главном потоке, прежде чем делать что-либо еще. Затем вы создаете MyInit()
для создания и уничтожения одного объекта каждого типа, который содержит одну из этих статик.
Единственная другая альтернатива - это наложить другое ограничение на то, как они могут использовать ваш сгенерированный код (использовать Boost, потоки Win32 и т. Д.). По моему мнению, любое из этих решений является приемлемым - можно сгенерировать правила, которым они должны следовать.
Если они не следуют правилам, изложенным в вашей документации, то все ставки отменены. Правило, что они должны вызывать функцию инициализации или зависеть от Boost, для меня не является необоснованным.