如何检查py::对象是否为python十进制.pybind11和python3.9中的小数



我是pybind11的新手,想检测py::对象是否与python的小数点一致。十进制的

如何在C++pybind11模块中编写它?

您可以使用typeid,假设您想检查pi是否是Decimal:的实例

#include <pybind11/embed.h>
#include <iostream>
#include <typeinfo>
namespace py = pybind11;
int main() {
py::scoped_interpreter python;
py::object Decimal = py::module_::import("decimal").attr("Decimal");
py::object pi = Decimal("3.14159");
if (typeid(pi) == typeid(Decimal)) {
std::cout << "pi is an instance of Decimaln";
} else {
std::cout << "pi is not an instance of Decimaln";
}
}

您还可以使用py::isistance函数:

#include <pybind11/embed.h>
#include <iostream>
#include <typeinfo>
using namespace pybind11::literals; // to bring in the `_a` literal
namespace py = pybind11;
int main() {
py::scoped_interpreter python;
py::object Decimal = py::module_::import("decimal").attr("Decimal");
py::object pi = Decimal("3.14159");
if (typeid(pi) == typeid(Decimal)) {
std::cout << "pi is an instance of Decimal with typeidn";
} else {
std::cout << "pi is not an instance of Decimaln";
}
py::dict d("spam"_a=py::none(), "eggs"_a=42);

if (!(typeid(d) == typeid(Decimal))) {
std::cout << "d is not an instance of Decimal with typeidn";
}
if (py::isinstance(pi, Decimal)) {
std::cout << "pi is an instance of Decimal with py::isinstance n";
}
if (!py::isinstance(d, Decimal)) {
std::cout << "d is not an instance of Decimal with py::isinstancen";
}
}

输出将是

pi is an instance of Decimal with typeid
d is not an instance of Decimal with typeid
pi is an instance of Decimal with py::isinstance 
d is not an instance of Decimal with py::isinstance

最新更新