小编jea*_*ean的帖子

指定std :: function的默认值

void func(const std::function<void()>& f = empty)
{
    if(f)
        f();
}
Run Code Online (Sandbox Code Playgroud)

什么是'空'应该是什么?我用[](){}.但从技术上讲,这不是空的,f()将执行.

c++ lambda

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

c ++ 11 - 随机设备使用

有什么不同

std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dist(0, 100);
for (int n = 0; n < 100; ++n)
    std::cout<<dist(gen)<<std::endl; 
Run Code Online (Sandbox Code Playgroud)

std::random_device rd;
std::uniform_int_distribution<int> dist(0, 100);
for (int n = 0; n < 100; ++n)
    std::cout<<dist(rd)<<std::endl; 
Run Code Online (Sandbox Code Playgroud)

第一个例子使用rd()作为种子,但输出类似,我想知道第一个优点是什么.

random c++11

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

mongodb - 执行批量查询

我首先需要来自集合的查询数据,然后根据这些数据,从集合b中查询.如:

For each id queried from a
    query data from b where "_id" == id
Run Code Online (Sandbox Code Playgroud)

在SQL中,这可以通过在单个选择中连接表a和b来完成.但是在mongodb中,它需要做多查询,看起来效率低下,不是吗?或者它只能通过2个查询来完成?(一个用于a,另一个用于b,而不是1加n)我知道NoSQL不支持join,但有没有办法批量执行for循环中的查询到单个查询?

mongodb

7
推荐指数
1
解决办法
7138
查看次数

在python中公开C++函数并在C++中嵌入python

我的应用有一些事件,每个事件都可以有一些动作.这些操作在C++中实现.我想将这些核心函数暴露给python并使用python来编写动作.优点是我可以修改操作而无需重新编译.例如:

CppClass o;

// --- this is a action----
o.f1();
o.f2();
// ------------------------
Run Code Online (Sandbox Code Playgroud)

使用python编写动作脚本:

def action1(o):
    o.f1()
    o.f2()
Run Code Online (Sandbox Code Playgroud)

在c ++中,使用解释器来运行此脚本,找到action1并使用从c ++对象转换的PyObject调用它.实际上,我没有将f1()和f2()暴露给python,我只是使用python重组动作的定义,所有函数都是由c ++二进制代码运行的.请注意,我没有在python中给出f1()和f2()的定义.

问题是:我如何公开全局函数?如:

def action2():
    gf1()
    gf2()
Run Code Online (Sandbox Code Playgroud)

boost :: python可以公开函数,但它不同,它需要编译一个DLL文件而main()属于python脚本.当然我可以使全局函数成为类静态成员,但我只是想知道.请注意,我必须在python中给出gf1()和gf2()的定义.

Jython可以很容易地做到这一点:只需在python代码中导入Xxx并调用Xxx.gf1()即可.但是在cython中,我如何在python中定义gf1()?这是一种扩展,但扩展需要提前编译Xxx.似乎只有将gf()变成一个类?

c++ python

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

通过boost :: python将C++对象传递给python函数

我想在c ++ app中使用embed python并调用python脚本中定义的函数.函数的参数是一个c ++对象.看我的代码:

class Test
{
public:
    void f()
    {
        std::cout<<"sss"<<std::endl;
    }
};

int main()
{
    Py_Initialize();
    boost::python::object main = boost::python::import("__main__");
    boost::python::object global(main.attr("__dict__"));
    boost::python::object result = boost::python::exec_file("E:\\python2.py", global, global);
    boost::python::object foo = global["foo"];
    if(!foo.is_none())
    {
        boost::python::object pyo(boost::shared_ptr<Test>(new Test())); // compile error
        foo(pyo);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

python2.py:

def foo(o):
    o.f()
Run Code Online (Sandbox Code Playgroud)

如何将c ++对象传递给foo?我知道swig可以做到这一点,但是boost :: python?

c++ boost-python

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

混淆java线程变量可见性

我发现的关于可见性的所有例子都是基本类型的例子.我想知道的是:如果一个对象在堆中新建,当一个线程调用其方法来改变其状态时,没有锁定或同步,其他线程会看到这个变化?想象一下Java.Colletion对象,一个线程调用它的add()方法

有人说堆中的对象仍然存在可见性问题,但JLS说:17.4.1共享变量可以在线程之间共享的内存称为共享内存或堆内存.

http://www.artima.com/insidejvm/ed2/jvm2.html说:线程的Java堆栈存储线程的Java(非本机)方法调用的状态.Java方法调用的状态包括其局部变量,调用它的参数,返回值(如果有)和中间计算.

所以我认为,JVM不会将堆中的对象复制到CPU缓存中.如果这是正确的,堆中的对象将不会有可见性问题,因为线程只引用堆中的对象.

BTW假设当一个线程调用.add()时会出现并发问题.在正常过程中,更改必须使用锁定保护,因此这个问题不是问题.但我只是想知道:)

java variables visibility

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

稳定的计时器,与系统时间无关

我用来java.util.Timer在我的应用程序中触发作业,但我发现它取决于系统时间:如果调整系统时间,定时器的触发器将受到影响.

例如,如果系统时间回退80秒,计时器将停止工作80秒.

Java有一种System.nanoTime独立于系统时间的方法,但它似乎无法使用Timer.

是否有Timer库支持我需要的东西?或者我必须自己实施?

请注意,我不需要精确的当前时间(日期),我需要一个精确的时间间隔

java timer

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

mongodb - 数组中的项目元素

a doc {"m":[1,2,3], "others":xxx},通过以下方式获取数组 'm' 中的第一个元素:

db.find({query},{"m":{$slice:1}, "m":1})
Run Code Online (Sandbox Code Playgroud)

返回的是{"m":[1]},doc中的元素是一个数组。但在这个查询中,只会获取数组中的一个元素,因此我不需要返回文档包含只有一个元素的数组。这就像子查询中的 SQL 局部变量。我想要的元素在原始文档中没有名称,如果我想获取它,那么我需要为它命名,我想要的返回文档类似于: {"localVariable":1} 而不是 {"m":[1 ]}

我尝试通过以下方式投影出第一个元素:

db.find({query},{"m":{$slice:1}, "m.1":1})
Run Code Online (Sandbox Code Playgroud)

但这行不通。

mongodb

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

IDE可以智能感知protobuf-python成员

我想要在python中生成的protobuf类的智能感知。但是生成的protobuf类的实现是特殊的,代码类似于:

class X(_message.Message):
  __metaclass__ = _reflection.GeneratedProtocolMessageType
  DESCRIPTOR = _X
Run Code Online (Sandbox Code Playgroud)

大多数的Python IDE只能智能感知__metaclass__DESCRIPTOR两个成员而不是成员.proto文件中定义。

怎么做?

python protocol-buffers

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

cocos2d-x动画循环播放

动画从点a移动到b,在动作中,动画需要循环播放.例如,子弹移动到一个点,这个子弹是一个应该循环播放的动画.

CCSequence::create(
  CCSpawn::createWithTwoActions(
    CCTargetedAction::create(sprite, CCMoveTo::create(3.0f, point_a)), 
    CCTargetedAction::create(sprite, CCRepeatForever::create(CCAnimate::create(animation)))
),0);
Run Code Online (Sandbox Code Playgroud)

但是CCRepeatForever不能成为动作序列的成员.那怎么办呢?我使用序列,因为有其他行为排队(上面省略)

cocos2d-x

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