小编luc*_*nte的帖子

C++ 11:为什么std :: condition_variable使用std :: unique_lock?

我对std::unique_lock工作时的作用感到有些困惑std::condition_variable.据我理解的文档,std::unique_lock基本上是一个臃肿锁定挡板,以交换两个锁之间的状态的可能性.

到目前为止我已经pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)用于此目的(我猜这是STL在posix上使用的).它需要一个互斥锁,而不是锁.

这有什么区别?std::condition_variable处理std::unique_lock优化的事实是什么?如果是这样,它究竟是如何更快?

c++ multithreading mutex c++11

70
推荐指数
2
解决办法
2万
查看次数

ruby散列中的条件键/值

是否有一个很好的(一行)方式在ruby中编写一个哈希值,只有条件满足时才有一些条目?我想到了

{:a => 'a', :b => ('b' if condition)}
Run Code Online (Sandbox Code Playgroud)

但是,:b == nil如果条件没有得到满足,那就离开了.我意识到这可以在两行左右轻松完成,但在一行中会更好(例如将哈希传递给函数时).

我错过了(还)另一个红宝石的惊人功能吗?;)

ruby

52
推荐指数
6
解决办法
3万
查看次数

类型断言/类型开关是否具有不良性能/在Go中速度慢?

在Go中使用类型断言/类型开关有多慢,作为运行时类型发现的方法?

我听说在C/C++中,例如,在运行时发现类型的性能很差.为了绕过它,通常会将类型成员添加到类中,因此您可以与这些成员进行比较而不是强制转换.

我没有在整个www中找到明确的答案.

这是我要问的一个例子 - 与其他类型检查方法(如上所述,或其他我不知道的)相比,这被认为是快速的吗?

func question(anything interface{}) {
    switch v := anything.(type) {
        case string:
            fmt.Println(v)
        case int32, int64:
            fmt.Println(v)
        case SomeCustomType:
            fmt.Println(v)
        default:
            fmt.Println("unknown")
    }
}
Run Code Online (Sandbox Code Playgroud)

casting type-conversion go type-assertion

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

C++ 11:std :: thread汇集了吗?

在C++ 03中,我使用pthread和自建的线程池,它总是保持几个线程运行(因为pthread_create速度很慢),这样我就可以在不考虑性能问题的情况下为小任务启动线程.

现在,在C++ 11中我们有std::thread.我想标准没有说明具体的实现,所以我的问题是标准的库实现.他们是否通常选择合并方法来构造std::threads是便宜的(例如不调用pthread_createposix),或者std::thread只是一个包装器?

换句话说,是否仍然在C++ 11中推荐一个线程池,或者我应该只std::thread在需要时创建一个并将性能提升到标准库?

c++ multithreading c++11 stdthread

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

模块和共享库之间的区别?

标题主要涵盖它,模块和共享库之间有什么区别?我刚刚在CMake的add_library命令中找到了这个区别,他们说:

SHARED库是动态链接的,并在运行时加载.MODULE库是未链接到其他目标的插件,但可以在运行时使用类似dlopen的功能动态加载.

但我可以使用dlopen()加载共享对象,不是吗?

linker module cmake shared-libraries

27
推荐指数
3
解决办法
8958
查看次数

Rails Simpleform与非模型输入

我有一个使用simpleform的普通表单.现在我想添加一个在模型中没有任何相应字段的输入,它将由控制器处理.我试过了

<%= simple_form_for @obj do |f| %>
  <%= f.input :name %>
  <%= f.input :attr, as: :string %>   <-- should just send "attr" as post data
<% end %>
Run Code Online (Sandbox Code Playgroud)

但这会产生Method not found: attr_not_in_obj错误.我显然可以使用标准的rails帮助器,但是我会错过输入周围的所有simpleform HTML,并且复制看起来不太合适.

简而言之:我正在寻找类似于简单形式的rails标签助手的东西,而不需要任何与模型的连接.如何添加与模型属性不对应的输入?

ruby forms ruby-on-rails simple-form

17
推荐指数
2
解决办法
1万
查看次数

绑定成员以可变方式运行

我有一个带有可变数量参数的成员函数,存储在a中std::function,我希望绑定实例并获得一个独立的函数对象.

template <class T, class R, class... Args>
void connect(const T& t, std::function<R(const T&, Args...)> f) {
  std::function<R(Args...)> = /* bind the instance c into the function? */
}

// ...

Class c;
connect(c, &Class::foo);
Run Code Online (Sandbox Code Playgroud)

对于我使用的固定数量的参数std::bind,但我不知道如何为可变参数执行此操作.

c++ templates variadic-templates c++11 std-function

12
推荐指数
2
解决办法
2017
查看次数

Ruby 2.0字节码导出/导入

我一直在阅读有关新的ruby 2.0功能,并发现它将支持字节码导入/导出:

Ruby 2.0有望简化将预编译的Ruby脚本保存到字节码表示中,然后直接运行它们.

我已经安装了ruby-2.0.0-p0,但是我没有找到任何关于如何导出字节码的信息(或者通常是关于这个问题的文档).此功能是否已实施,如果已实施,我该如何使用它?

我也想知道一些细节.YARV字节码是否应该与平台无关?所有宝石都自动包含在字节码中吗?

ruby bytecode yarv ruby-2.0

10
推荐指数
1
解决办法
2228
查看次数

Ember:从模型中获取当前的适配器

我在一个DS.Model扩展类中,想要获取当前的适配器实例.我在这里找到了一些代码:

App.__container__.lookup('adapter:application')
Run Code Online (Sandbox Code Playgroud)

但它看起来很hacky,我想知道是否有更正确的方法.

ember.js ember-data

10
推荐指数
2
解决办法
2535
查看次数

std :: function复制参数?

我的代码:

#include <iostream>
#include <functional>
using namespace std;

struct A {
  A() = default;
  A(const A&) {
    cout << "copied A" << endl;
  }
};

void foo(A a) {}

int main(int argc, const char * argv[]) {
  std::function<void(A)> f = &foo;
  A a;
  f(a);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在控制台上看到"复制A"两次.为什么对象被复制两次而不是一次?我怎样才能正确预防?

c++ c++11 std-function

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