Como posso escrever um modelo de função para todos os tipos com uma característica específica?

Considere o seguinte exemplo:

struct Scanner
{
    template <typename T>
    T get();
};

template <>
string Scanner::get()
{
    return string("string");
}

template <>
int Scanner::get()
{
    return 10;
}

int main()
{
    Scanner scanner;
    string s = scanner.get<string>();
    int i = scanner.get<int>();
}

oScanner&nbsp;A classe é usada para extrair tokens de alguma fonte. O código acima funciona bem, mas falha quando tentoget&nbsp;outros tipos integrais como umchar&nbsp;ou umunsigned int. O código para ler esses tipos é exatamente o mesmo que o código para ler umint. Eu poderia apenas duplicar o código para todos os outros tipos integrais que gostaria de ler, mas prefiro definir um modelo de função para todos os tipos integrais.

Eu tentei o seguinte:

struct Scanner
{
    template <typename T>
    typename enable_if<boost::is_integral<T>, T>::type get();
};

O que funciona como um encanto, mas não tenho certeza de comoScanner::get<string>()&nbsp;para funcionar novamente. Então, como posso escrever código para poder fazerscanner.get<string>()&nbsp;escanner.get<any integral type>()&nbsp;e tem uma definição única para ler todos os tipos integrais?

Atualização: questão bônus: E se eu quiser aceitar mais de um intervalo de classes com base em algumas características? Por exemplo: como devo abordar esse problema se quiser ter trêsget&nbsp;funções que aceitam (i) tipos integrais (ii) tipos de ponto flutuante (iii) strings, respectivamente.