2

次のように整列されたクラスを公開しようとすると:

class __declspec(align(16)) foo
{
public:
    void foo_method() {}
};

BOOST_PYTHON_MODULE(foo_module)
{
    class_<foo>("foo")
        .def("foo_method", &foo::foo_method);
}

エラーが発生します(msvs 2010):

error C2719: 'unnamed-parameter': formal parameter with __declspec(align('16')) won't be aligned,
see reference to class template instantiation 'boost::python::converter::as_to_python_function<T,ToPython>' being compiled

これまでに見つけた解決策は、スマート ポインターを使用してオブジェクトを格納することです。

BOOST_PYTHON_MODULE(foo_module)
{
    class_<foo, boost::shared_ptr<foo>, boost::noncopyable>("foo")
        .def("foo_method", &foo::foo_method);
}

より良い解決策はありませんか?オブジェクトを返すすべての関数を値でラップして、代わりにスマート ポインターを返す必要があり、パフォーマンスも低下するため、これは非常に厄介です。

4

1 に答える 1