Make constant array accessible from different places

Stephan Bergmann sbergman at
Fri Aug 28 17:16:04 UTC 2020

On 28/08/2020 18:53, Regina Henschel wrote:
> I have a constant array
> const std::pair<OUString, OUString> aApiToLabelFooPairs[] =
> {
>      {"LineStyle", "LabelBorderStyle"},
>     etc.
> }
> for to map draw object fill and line property names to data-label 
> related properties of series and points in a chart on ODF import.
> I need it in SchXMLSeries2Context::setStylesToSeries and in 
> SchXMLSeries2Context::setStylesToDataPoints.
> I have not worked on export yet, so I don't know whether it will be 
> needed on export too.
> Where to put this array and how?
> I can put it separately from the SchXMLSeries2Context methods into the 
> file SchXMLSeries2Context.cxx. Would that be "static" or not?

If aApiToLabelFooPairs is only used in 
xmloff/source/chart/SchXMLSeries2Context.cxx, you best put it in that 
file, at file scope.  And as the object is const, "static" would be 
redundant (and loplugin:redundantstatic would even warn about it).

(There's a slight drawback with global static objects involving e.g. 
OUString construction, as that incurs some cost when the library 
containing the object is loaded.  std::pair construction is by now 
constexpr if the construction of its members is, and two 
constexpr-constructible replacements for OUString that are suitable in 
many use cases is/was OUStringLiteral---but for which I'm planing on 
changing its role somewhat, so that it would unfortunately no longer be 
usable in your example---and std::u16string_view.  But you can ignore 
that for now and we can revisit things once (a) you know the final place 
for aApiToLabelFooPairs when all uses across import and export have been 
determined, and (b) the OUStringLiteral -> std::u16string_view situation 
has settled.)

More information about the LibreOffice mailing list