I'm just now treading into the (rather intimidating) waters of template metaprogramming, so I'm not even sure if it will fit what I'm trying to accomplish. I need to create a kind of registry to keep track of instances of variables of different types (actually, several of these registries, representing different system states); variables of a type would be identified by an unique (integer) id. In other words, the variables within a particular registry represent the state of the system at a given point in time, so although each registry would have variables of the same types and ids, the values of the variables in different registries may be different. If the variables were all of the same type, a simple map would work. What I would like is a way of asking this registry for a variable of a specified type and id, and get back the appropriate instance (of the appropriate type). I.e., something like the following would be ideal: MyType mt = registry.get<MyType>(my_id); Is there anything in the MPL (or elsewhere in Boost) that might help me accomplish what I'm looking to do? If not, does anyone have any design suggestions to accomplish this in another way? Any help would be appreciated! Thanks, Tim