Как создать языковую копию существующего сайта на английском языке с функциями оперативного копирования в AEM 6.3?

Сначала вы должны сохранить некоторое состояние в каждом потоке. Вы можете сделать это с помощью функции iword и указателя, который вы передаете ей, заданного xalloc :

inline int geti() { 
    static int i = ios_base::xalloc();
    return i;
}

ostream& add_one(ostream& os) { os.iword(geti()) = 1; return os; } 
ostream& add_none(ostream& os) { os.iword(geti()) = 0; return os; }

на месте, вы уже можете получить некоторое состояние во всех потоках. Теперь вам просто нужно подключиться к соответствующей операции вывода. Цифровой вывод выполняется фасеткой, поскольку он потенциально зависит от локали. Итак, вы можете сделать

struct my_num_put : num_put {
    iter_type 
    do_put(iter_type s, ios_base& f, char_type fill, long v) const { 
        return num_put::do_put(s, f, fill, v + f.iword(geti())); 
    } 

    iter_type 
    do_put(iter_type s, ios_base& f, char_type fill, unsigned long v) const { 
        return num_put::do_put(s, f, fill, v + f.iword(geti())); 
    } 
}; 

Теперь вы можете протестировать материал.

int main() {
    // outputs: 11121011
    cout.imbue(locale(locale(),new my_num_put));
    cout << add_one << 10 << 11 
         << add_none << 10 << 11;
}

Если вы хотите, чтобы только следующее число увеличивалось, просто установите для этого слова значение 0 снова после каждого вызова do_put.

0
задан aem2019 16 January 2019 в 03:07
поделиться