Перегрузка и специализация шаблона для приоритета вызова функции

Если обрабатывать строки как байты - это больше, вы можете использовать следующие функции

function u_atob(ascii) {
    return Uint8Array.from(atob(ascii), c => c.charCodeAt(0));
}

function u_btoa(buffer) {
    var binary = [];
    var bytes = new Uint8Array(buffer);
    for (var i = 0, il = bytes.byteLength; i < il; i++) {
        binary.push(String.fromCharCode(bytes[i]));
    }
    return btoa(binary.join(''));
}


// example, it works also with astral plane characters such as '         
0
задан HolyBlackCat 3 March 2019 в 08:32
поделиться

1 ответ

Попробуйте скомпилировать приведенный ниже код

template<void>
void foo(){}

Я получил ошибку компилятора 'void' не является допустимым типом для параметра шаблона нетипичного типа .


В качестве параметра шаблона вы можете передать:

1) type , затем вы объявляете его, используя class / typename, как показано ниже:

template< class/typename A[optional] = void>
void foo2(){}

2) non-type , затем вы можете передать в качестве параметра шаблона некоторое значение типа intergers, указатели, ссылку на Lvalue и т. Д. (Полный список здесь )

template<void*>
void foo3(){}

3) тип шаблона параметр

В вашем примере is_nothrow_move_constructible возвращает значение true для A, затем компилятор встречает строку:

template <typename U = T, enable_if_t<is_nothrow_move_constructible<U>{}>>

что такое:

template <typename U = T, void>

эта строка имеет неверную синтаксис, и компилятор удаляет этот шаблон функции-члена из набора перегрузок. Вы можете исправить это, объявив enable_if_t<is_nothrow_move_constructible<U>{} как параметр типа:

template <typename U = T, 
          typename   = enable_if_t<is_nothrow_move_constructible<U>{}> > // typename = void
    void realloc_impl(priority_tag<2> pr)
    {
        cout << "nothrow move \n";
    };

или как нетипичный (указатель на void), что вы сделали в своем примере.

0
ответ дан rafix07 3 March 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: