如何从stringstream复制一个纯粹的facet?

时间:2014-03-14 10:57:41

标签: copy locale stringstream

假设我在字符串流中加入了一个方面:

std::stringstream msgStream;
{
   bpt::time_facet * afacet = new bpt::time_facet("%Y-%m-%d\t%H:%M:%S\t0.%f");
   msgStream.imbue(std::locale(msgStream.getloc(),afacet));
}
// How to access the facet in order to copy it?

如何从msgStream复制此构面以便在另一个字符串流中添加新副本? 如果afacet超出范围但msgStream没有,则有办法检索构面指针。

1 个答案:

答案 0 :(得分:1)

你正在招募std::locale,而不是bpt::time_facet

您可以从std::stringstream

访问msgStream.getloc()的当前区域设置

使用std::locale对象,您可以使用其成员facet访问构面:

std::locale myLocale = msgStream.getloc();
myLocale.facet; //Operate on the facet. Returns std::locale::facet.

如果需要,您可以将其投放到bpt::time_facet

有关详细信息,请参阅类引用 - imbuefacetstringstreamlocale