小编Rob*_*cus的帖子

用 boost.python 包装模板函数

我正在尝试使用 boost.python 将以下 c++ 函数公开给 python:

template <typename genType> 
    genType refract(
        genType const & I, 
        genType const & N, 
        typename genType::value_type const & eta);
Run Code Online (Sandbox Code Playgroud)

我得到的是这个:

template<typename N>
    N reflect(N const & i, N const & n, typename N::value_type const & eta)
    {
        return glm::N refract(i,n,eta);
    }

BOOST_PYTHON_MODULE(foo)
{
    def("reflect", reflect<float>);
    def("reflect", reflect<double>);
}
Run Code Online (Sandbox Code Playgroud)

编译时出现以下错误:

错误 C2780:'void boost::python::def(const char *,F,const A1 &,const A2 &,const A3 &)':需要 5 个参数 - 提供 2 个

我应该如何包装它?

- - -编辑 - - -

这有效:

template<class …
Run Code Online (Sandbox Code Playgroud)

c++ python templates boost word-wrap

5
推荐指数
1
解决办法
3867
查看次数

用boost.python包装结构列表

我有一个C++函数,它返回一个结构列表.在struct中,有更多的结构列表.

struct CameraInfo {
    CamName                     name;
    std::list<CamImageFormat>  lImgFormats;
    std::list<CamControls>      lCamControls;
};

std::list<CameraInfo> getCameraInfo()
{
    std::list<CameraInfo> lCamerasInfo;
    // fill lCamerasInfo
    return lCamerasInfo; 
}
Run Code Online (Sandbox Code Playgroud)

然后出口我我用的是:

class_<CameraNode....> >("CameraNode", no_init)
...
...
.def("listCameraInfo", make_function(&CameraNode::listCameraInfo))
        .staticmethod("listCameraInfo")
...
;
Run Code Online (Sandbox Code Playgroud)

这是好的,因为我使用cout在屏幕上打印数据...我想现在使用返回值和它的内容来自python类属性,这样:

cameras = []
cameras = CameraNode.getCameraInfo()
print cameras[0].name
print cameras[0].lImgFormats[0]
and so on...
Run Code Online (Sandbox Code Playgroud)

这有可能吗?我应该使用add_property吗?我不认为我可以为每个结构创建一个类.这个设计在我只使用C++时很有意义,但是现在我必须把它包起来,我越来越困惑了.

有关以一般方式使用boost.python包装std :: list的任何建议都将被广泛接受.

编辑:

我将在这里添加我发现有用的链接: 迭代器 StlContainers

c++ python list word-wrap boost-python

5
推荐指数
1
解决办法
4167
查看次数

纯BASH中的列表理解?

是否有可能像python和其他语言一样进行LC,但只使用BASH结构?

我希望能做什么,例如:

function ignoreSpecialFiles()
{
    for options in "-L" "-e" "-b" "-c" "-p" "-S" "! -r" "! -w"; do
        if [[ $options "$1" -o $options "$2" ]];then
            return $IGNORED
        fi
    done
}
Run Code Online (Sandbox Code Playgroud)

而不是使用这样的代码:

if [[ -L "$1" -o -e "$1" -o -b "$1" -o -c "$1" -o -p "$1" -o -S "$1" -o\
! -r "$1" -o ! -w "$1" ]]
Run Code Online (Sandbox Code Playgroud)

你知道有关模拟LC的任何食谱吗?

编辑:

一个更具LC的具体例子:

M = [x for x in S if x % 2 == 0] #is python
Run Code Online (Sandbox Code Playgroud)

什么是在bash中做同样的pythonic方式? …

python bash list-comprehension

4
推荐指数
2
解决办法
3209
查看次数