Nan::To<T> принимает все преобразования

Я пытаюсь написать вспомогательную функцию проверки аргумента, но, по-видимому, Nan::To никогда не перестает преобразовывать и возражать против T, даже если преобразование невозможно.

//convert.cpp

template <typename T>
bool argument_verify(Local<Value> const& in_value, T & out_value)
{
    auto maybe_value = Nan::To<T>(in_value);
    if (maybe_value.IsJust()) return true;
    else return false;
}

void test(const FunctionCallbackInfo<Value>& args) {
    Isolate* isolate = args.GetIsolate();

    u_int32_t   param1;
    bool verify_param1 = argument_verify(args[0], param1);

    args.GetReturnValue().Set(verify_param1);

}

//test.js

describe('Sandbox - This is just a place for testing stuff', function() {
it('Testing new library argument verification', function() {

    const out_buffer = cil.test(function(){})
    console.log(out_buffer)
})
it('Testing new library argument verification', function() {

    const out_buffer = cil.test({"this_is":"json"})
    console.log(out_buffer)
})
it('Testing new library argument verification', function() {

    const out_buffer = cil.test()
    console.log(out_buffer)
})

})

В коде выше, если мое понимание верно, объект Maybe, возвращаемый Nan::To, должен быть пустым. Не должно быть допустимого преобразования из json в u_int32_t, функции в u_int32_t или неопределенного в u_int32_t.

Но я все еще понимаю, как будто все 3 случая просто.

Я неправильно понимаю функцию Nan::To?

1 ответ

Решение

Смотрите обсуждение:

https://github.com/nodejs/nan/issues/726

Краткий ответ:

Если предположить, что u_int32_t совпадает с uint32_t, то да, есть. Преобразователи следуют семантике JS; например, не определено >>> 0 === 0

Другие вопросы по тегам