Pergunta

Eu tenho alguns problemas com usando o boost::localidade (1.49) no Debian 7 GNU/Linux (versão do GCC é 4.6.3-1).O código é salvo no cp1251.Usando funções como "isalpha" (ou "boost::algoritmo::is_alpha") acaba com exceção de (bad_cast).Parece que não há adequada faceta para esta verificação.Aqui está o código:

#include <iostream>

#include <boost/locale.hpp>

int main ()
{
  boost::locale::generator gen;
  std::locale loc(gen.generate("ru_RU.cp1251"));
  unsigned char debug501 = 'Б';
  bool debug500 = std::isalpha(debug501, loc);
  std::cout<< debug500;

  return 0;
}

Ele é executado com nenhuma exceção no Windows 7 com o Visual Studio 2008.No entanto, ainda há um problema:"debug500" é definida como false no presente caso.Ele funciona bem apenas quando localidade é gerado como este: std::locale loc(".1251").Mas o mesmo problema aparece quando a localidade é gerado por impulso: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));.Eu ficaria grato se alguém pudesse explicar o que há de errado com o código e/ou como eu posso fazer um teste semelhante (isalpha) com impulso e std com cp1251 localidade.

Foi útil?

Solução

Substituir:

unsigned char debug501 = 'Б';

com:

char debug501 = 'Б';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top