On 10/15/2017 03:28 PM, Laurent BP wrote:
I would like to make const a rtl::Static. I tryed:
struct MyConstStatic : public rtl::Static<const MyType, MyConstStatic> {};
First of all, internal LO code no longer needs to use rtl::Static, as
all relevant toolchains support C++11 "magic statics" by now.
But now, how to initialize it? How when it is an array like NfKeywordTable
https://opengrok.libreoffice.org/xref/core/include/svl/nfkeytab.hxx#107
If you need something other than a default-initialized T, there's
rtl::StaticWithInit. With your specific example, that would be
something like
struct MyConstStaticInit {
NfKeywordTable operator ()() {
NfKeywordTable t;
t[NF_KEY_E] = "...";
t[NF_KEY_AMPM] = "...";
// ...
t[NF_KEY_THAI_T] = "...";
return t;
}
};
struct MyConstStatic:
public rtl::StaticWithInit<NfKeywordTable const, MyConstStaticInit>
{};
OUString test(NfKeywordIndex n) { return MyConstStatic::get()[n]; }
(But of course a class that, unlike the existing NfKeywordTable, can be
initialized with a std::initializer_list would be more useful in such a
case. Together with the non-necessity to use rtl::Static in the first
place, all could boil down to something like
OUString test(NfKeywordIndex n) {
static NfKeywordTable const t{"...", "...", /*...*/ "..."};
return t[n];
};
then.)
_______________________________________________
LibreOffice mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice