Update obj.h

This commit is contained in:
blueloveTH 2023-03-13 16:36:48 +08:00
parent 44afa5b023
commit 300058b063

View File

@ -181,28 +181,31 @@ void _check_py_class(VM* vm, const PyVar& var);
template<typename T>
T py_pointer_cast(VM* vm, const PyVar& var);
struct Discarded {};
template<typename __T>
__T py_cast(VM* vm, const PyVar& obj) {
using T = std::decay_t<__T>;
if constexpr(std::is_pointer_v<__T>){
return py_pointer_cast<__T>(vm, obj);
}
using T = std::decay_t<__T>;
if constexpr(is_py_class<T>::value){
}else if constexpr(is_py_class<T>::value){
_check_py_class<T>(vm, obj);
return OBJ_GET(T, obj);
}else{
return Discarded();
}
throw std::runtime_error("bad py_cast() call");
}
template<typename __T>
__T _py_cast(VM* vm, const PyVar& obj) {
using T = std::decay_t<__T>;
if constexpr(std::is_pointer_v<__T>){
return py_pointer_cast<__T>(vm, obj);
}
using T = std::decay_t<__T>;
if constexpr(is_py_class<T>::value){
}else if constexpr(is_py_class<T>::value){
return OBJ_GET(T, obj);
}else{
return Discarded();
}
throw std::runtime_error("bad py_cast() call");
}
#define VAR(x) py_var(vm, x)