Listing 2: Template parameter substitution implementation
#include <string>
#include <vector>
#include <map>
class gstring : public std::string {
public:
gstring(const char* c) : std::string(c) {}
};
class gstringvector : public std::vector<std::string> {
};
#if defined(NAIVE)
typedef std::map<std::string, std::vector<std::string> >
GeneralRegistry;
#elif defined(SMART)
typedef std::map<gstring, std::vector<std::string> >
GeneralRegistry;
#elif defined(SMARTER)
typedef std::map<gstring, gstringvector>
GeneralRegistry;
#endif
int main(int argc, char* argv[])
{
GeneralRegistry gr;
while (argc--) {
gr[argv[argc]].push_back("value");
}
}
}