次のように整列されたクラスを公開しようとすると:
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);
}
より良い解決策はありませんか?オブジェクトを返すすべての関数を値でラップして、代わりにスマート ポインターを返す必要があり、パフォーマンスも低下するため、これは非常に厄介です。