小编gir*_*odt的帖子

boost :: python和weak_ptr:东西消失了

我想将对象的引用存储为weak_ptr.在纯C++中,以下工作原理:

#include <iostream>

#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>

using namespace std;
using namespace boost;

struct Empty
{
    Empty(){}
};

struct Store
{
    weak_ptr<Empty> value;
    Store(){};

    void setValue(shared_ptr<Empty> v) {
        cout << "storing " << v << endl;
        this->value = weak_ptr<Empty>(v);
        shared_ptr<Empty> v_ok = this->value.lock();
        if (v_ok) {
            cout << "ok, v has been stored" << endl;
        }
    }

    shared_ptr<Empty> getValue() {
        shared_ptr<Empty> p = this->value.lock();
        if (p) {
            cout << "stored value : " << p << endl;
        } else { …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-python

9
推荐指数
1
解决办法
782
查看次数

boost :: python和set :: erase - >奇怪的行为

我正在尝试将对象存储在std :: set中.这些对象是来自python环境的boost :: shared_ptr <>.向集合中添加值不会导致任何麻烦.但是当我尝试擦除一个值时,即使我传递了相同的引用,它也无法工作.这是一个例子:

#include <set>
#include <iostream>

#include <boost/shared_ptr.hpp>
#include <boost/python.hpp>

using namespace std;
using namespace boost;
using namespace boost::python;

struct Bar
{
    Bar() {}
};

struct Foo
{
    set< shared_ptr<Bar> > v_set;
    shared_ptr<Bar> v_ptr;

    Foo() {}

    void add( shared_ptr<Bar> v_param ) {
    cout << "storing " << v_param << "in v_set and v_ptr" << endl;
    v_set.insert(v_param);
    v_ptr = v_param;

    }

    void del( shared_ptr<Bar> v_param ) {
    cout << "deleting " << v_param << endl;
    if (v_param …
Run Code Online (Sandbox Code Playgroud)

c++ boost shared-ptr boost-python c++11

6
推荐指数
1
解决办法
221
查看次数

在编译时解析模板

在我的理解中,go模板在运行时从给定的源解析,以获得类型template.Template的编译版本.然后,对某些数据执行编译版本以进行实际模板化.

但后来我想知道:是否可以在编译时解析模板?

go

4
推荐指数
1
解决办法
654
查看次数

垃圾收集中的 luajit 段错误

我对使用 定义的用户数据有疑问ffi.metatype。当对象被垃圾收集时,我会遇到段错误。这是代码。

ffi = require("ffi")
srate = 48000

ffi.cdef[[
typedef struct sin_state {
    float _now;   // time of last eval
    float _last;  // result of last eval
    float _freq;  // frequency
    float _gain;  // gain
    float _phase; // phase
    float _w;     // angular speed in radians/sample
    float _p;     // update parameter
    float _y[3];  // last 3 steps
} sin_t;
]]

sin = {}

sin.mt = {
    __call = function(s,now)
        if s._now < now then
            s._now = now
            s._phase …
Run Code Online (Sandbox Code Playgroud)

lua garbage-collection luajit

4
推荐指数
1
解决办法
609
查看次数

在go中声明空类型

对于给定的类型Data,我想定义一组过滤器,每个过滤器Data以某种方式处理.有些过滤器只需要处理数据,其他过滤器可能需要额外的参数.

type Data struct {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我希望能够定义过滤器列表,并按顺序将它们应用于实例Data.为了实现这一点,我定义了一个Filter接口:

type Filter interface {
    Apply (d *Data) error
}
Run Code Online (Sandbox Code Playgroud)

要定义过滤器,我所要做的就是创建一个新类型并为其定义Apply方法.

现在,假设我有一个不需要任何其他信息的过滤器.将它定义为空是好的做法struct吗?

type MySimpleFilter struct {}

func (f *MySimpleFilter) Apply (d *Data) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

go

3
推荐指数
1
解决办法
227
查看次数

标签 统计

boost ×2

boost-python ×2

c++ ×2

go ×2

c++11 ×1

garbage-collection ×1

lua ×1

luajit ×1

shared-ptr ×1