How do you set the cout locale to insert commas as thousands separators?
Given the following code:
cout << 1000;
I would like the following output:
1,000
This can be done using std::locale, and the cout.imbue() function, but I fear I may be missing a step here. Can you spot it? I'm currently copying the current locale, and adding a thousands separator facet, but the comma never appears in my output.
template<typename T> class ThousandsSeparator : public numpunct<T> {
public:
ThousandsSeparator(T Separator) : m_Separator(Separator) {}
protected:
T do_thousands_sep() const {
return m_Separator;
}
private:
T m_Separator;
}
main() {
cout.imbue(locale(cout.getloc(), new ThousandsSeparator<char>(',')));
cout << 1000;
}
The default implementation of do_thousands_sep
already returns ','
. It looks like you should override do_grouping
instead. do_grouping
returns an empty string by default, which means no grouping. This means groups of three digits each:
string do_grouping() const
{
return "\03";
}