12.4.7  类messageretrieval

12.4.7message retrieval

类message<charT>用于实现从类message中返回字符串。模板类messages用于描述一个对象。该对象服务于一个locale刻面,用以从给定的具有国际信息locale对象中返回local-ized信息。当前,当message类被实现时,并没有信息。

1.类模版messages

类message的声明形式为:

978-7-111-51399-5-Chapter12-217.jpg

978-7-111-51399-5-Chapter12-218.jpg

类型message_base::catalog的值是可用作成员get和close的参数,可以通过调用成员open()获取。

(1)成员函数

978-7-111-51399-5-Chapter12-219.jpg

函数返回do_open(name,loc)。函数的作用是打开message catalog。参数name表示被搜索的catalog的名称;参数loc代表在catalog中正在被搜索的locale。

978-7-111-51399-5-Chapter12-220.jpg

函数返回message catalog。

978-7-111-51399-5-Chapter12-221.jpg

函数的作用是关闭message catalog。

(2)类message的虚函数

978-7-111-51399-5-Chapter12-222.jpg

函数返回值是1个值。该值可能会传递给get()函数,从而可以返回该值。按照已定义的映射从message catalog中识别字符串名称。函数执行的结果可以被使用,直到将其传递给close()函数。close()函数会将其关闭。

若没有catalog被打开,则返回值会小于0。

当返回信息时,参数loc被用于字符集编码转换。

978-7-111-51399-5-Chapter12-223.jpg

catalog类对象cat是从open()获取的,并且该catalog是没有关闭的。

通过参数set识别的信息,msgid,和dfault,按照已定义的可实施映射。如果没有找到该信息,返回dfault。

978-7-111-51399-5-Chapter12-224.jpg

catalog类对象cat可以通过调用open()函数获取,并且该catalog是没有关闭的。其作用主要是释放和cat相关的不确定的资源。

2.类模板message_byname

类模板message_byname的声明形式如下:

978-7-111-51399-5-Chapter12-225.jpg

派生而来的模板类message_byname用于描述一个对象。该对象服务于给定locale类的message刻面,并返回本地信息。

例12-15

978-7-111-51399-5-Chapter12-226.jpg

978-7-111-51399-5-Chapter12-227.jpg

例12-15的执行结果为:

can't open the message.

出现上述结果的原因在于如下代码:

978-7-111-51399-5-Chapter12-228.jpg

在Windows XP环境中安装的Visual Studio 2008开发环境中,没有对open()函数和do_open()进行定义,而仅仅在do_open()函数中直接返回-1。