Executar métodos diferentes com base no tipo de variável de modelo

Existe uma maneira de determinar o tipo de variável passado para um modelo e chamar uma função com base em se é umint oustd::string etc ...?

Por exemplo

template <class T>
struct Jam
{
     Jam(T *var)
     {
         if (typeid(var) == typeid(std::string*)
                *var = "Hello!";
         else if (typeid(var) == typeid(int*)
                *var = 25;
     }
};

Quando tento usar esse código, recebo um erroinvalid conversion from const char* to int. Eu suspeito que isso é porque o compilador "expande" o modelo em funções separadas e quando eu especifiquei uma nova instância da estruturathrow Jam<std::string>(&setme);&nbsp;detectou ovar* = 25&nbsp;declaração e se recusou a compilar.

Existe uma maneira correta de fazer isso? Talvez com guardas macro? Obrigado.