@Martin: я говорю о возвращаемой по умолчанию форме do_thousands_sep, которая называется ','. Это не то же самое, что «локаль по умолчанию». «Возвращает: символ для использования в качестве разделителя группы цифр. Требуемые специализации возвращаются’, ’или L’, ’».

вая следующий код:

cout << 1000;

Я хотел бы следующий вывод:

1,000

Это можно сделать, используя std :: locale и функцию cout.imbue (), но я боюсь, что здесь может быть пропущен шаг. Вы можете это заметить? В настоящее время я копирую текущую локаль и добавляю фасет разделителя тысяч, но запятая никогда не появляется в моих выходных данных.

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;
}
 Fred Nurk18 янв. 2011 г., 20:42
Вы пытались скомпилировать точный код, который, по вашему мнению, вы используете?
 Ch'en Meng05 июл. 2017 г., 17:56
Есть ли утечка памяти?

Ответы на вопрос(1)

Решение Вопроса

Реализация по умолчаниюdo_thousands_sep уже возвращается',', Похоже, вы должны переопределитьdo_grouping вместо.do_grouping по умолчанию возвращает пустую строку, что означает отсутствие группировки. Это означает группы из трех цифр каждая:

string do_grouping() const
{
    return "\03";
}
 ybungalobill19 янв. 2011 г., 08:11
@Martin: я говорю о возвращаемой по умолчанию форме do_thousands_sep, которая называется ','. Это не то же самое, что «локаль по умолчанию». «Возвращает: символ для использования в качестве разделителя группы цифр. Требуемые специализации возвращаются’, ’или L’, ’».
 Cory Klein18 янв. 2011 г., 21:47
Что означает "\ 03"? Это ASCII для "конца текста"? Если так, то почему?
 ybungalobill18 янв. 2011 г., 22:03
@Cory: do_grouping возвращает строку, которая обрабатывается как массив чисел из одного символа, представляющих размер группы. «\ 03» создает строку, содержащую один и только один символ с числовым значением 3, что означает, что в каждой группе будет по 3 цифры.
 Martin York18 янв. 2011 г., 23:27
По умолчанию это не ','. C local не использует группировку, в противном случае это локально.

Ваш ответ на вопрос