std C++ v3 locale, messages непонятность
Можно правда сделать такой хак:
class msg_localization: public std::messages<char>
{
protected:
virtual catalog do_open(const std::string&,const std::locale&)const
{
cout<<"do_open call\n";
return -1;
}
public: // содрано с <xlocmes> с небольшим исправлением
static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
{ // return locale category mask and construct standard facet
if (_Ppf != 0 && *_Ppf == 0)
*_Ppf = _NEW_CRT msg_localization;
return (_X_MESSAGE);
}
};
тфу!
начал разбираться с v3 под руководством страуса, а тут самплес компилится, но работает не правильно и в gcc и визуале
Вот полный код:
// loc.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <string>
#include <stdlib.h>
using namespace std;
class msg_localization: public std::messages<char>
{
protected:
virtual catalog do_open(const std::string&,const std::locale&)const
{
cout<<"do_open call\n";
return -1;
}
public:
static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
{ // return locale category mask and construct standard facet
if (_Ppf != 0 && *_Ppf == 0)
*_Ppf = _NEW_CRT msg_localization;
return (_X_MESSAGE);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
const messages<char>& m=use_facet<msg_localization>(locale;
m.open("./msgdir/",locale;
system("PAUSE");
return 0;
}
Оставить комментарий
Hottab
почему, если do_open объявлена как virtual,acatalog open(const basic_string<char>& __s, const locale& __loc) const
{ return this->do_open(__s, __loc); }
"do_open call" не видно в выводе проги