12.4.7 类messageretrieval
类message<charT>用于实现从类message中返回字符串。模板类messages用于描述一个对象。该对象服务于一个locale刻面,用以从给定的具有国际信息locale对象中返回local-ized信息。当前,当message类被实现时,并没有信息。
1.类模版messages
类message的声明形式为:
类型message_base::catalog的值是可用作成员get和close的参数,可以通过调用成员open()获取。
(1)成员函数
函数返回do_open(name,loc)。函数的作用是打开message catalog。参数name表示被搜索的catalog的名称;参数loc代表在catalog中正在被搜索的locale。
函数返回message catalog。
函数的作用是关闭message catalog。
(2)类message的虚函数
函数返回值是1个值。该值可能会传递给get()函数,从而可以返回该值。按照已定义的映射从message catalog中识别字符串名称。函数执行的结果可以被使用,直到将其传递给close()函数。close()函数会将其关闭。
若没有catalog被打开,则返回值会小于0。
当返回信息时,参数loc被用于字符集编码转换。
catalog类对象cat是从open()获取的,并且该catalog是没有关闭的。
通过参数set识别的信息,msgid,和dfault,按照已定义的可实施映射。如果没有找到该信息,返回dfault。
catalog类对象cat可以通过调用open()函数获取,并且该catalog是没有关闭的。其作用主要是释放和cat相关的不确定的资源。
2.类模板message_byname
类模板message_byname的声明形式如下:
派生而来的模板类message_byname用于描述一个对象。该对象服务于给定locale类的message刻面,并返回本地信息。
例12-15
例12-15的执行结果为:
can't open the message.
出现上述结果的原因在于如下代码:
在Windows XP环境中安装的Visual Studio 2008开发环境中,没有对open()函数和do_open()进行定义,而仅仅在do_open()函数中直接返回-1。