0

Boost pythonライブラリを使用して、渡されたオブジェクトタイプがpythonに存在するかどうかを確認する必要があります。

// bp = boost::python
bool TypeExists(const std::string &typeName)
{
    bp::object ret = bp::exec(
            (boost::format("'%1%' in globals()") % typeName).str().c_str()
    );
    return bp::extract<bool>(ret);
}

したがって、このコードでは、次のようなPython式を実行します'TypeName' in globals()。これにより、ブール型のオブジェクトが返されます。ただし、extractは常に0を返します。呼び出し後の次の行TypeExistsでこのタイプのオブジェクトを作成するため、タイプ100%が存在します。どうしたの?

4

1 に答える 1

2

問題は、execがPythonコードを実行し、実行結果(実行されたかエラーがあったかどうか)を返すことです。そして、式の評価の結果が必要です。

式の評価結果を取得するには、ここでevalを使用する必要があります。

bp::object ret = bp::eval(...)

これについては、ドキュメントで説明されています。

于 2012-08-10T10:22:09.430 に答える