我有这个代码:
#include <iostream>
#include <functional>
#include <vector>
int main () {
std::vector<int> kk;
kk.push_back(2);
std::function<int(int)> foo = std::function<int(int)>([kk](int x)
{
kk.push_back(1);
return kk[0]+1;
});
std::cout << "foo: " << foo(100) << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能kk在 lambda 函数内部修改通过捕获传递的vector ?
我收到此错误:
11:21:错误:将 'const std::vector' 作为 'void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = 整数;_Alloc = std::allocator; std::vector<_Tp, _Alloc>::value_type = int]' 丢弃限定符 [-fpermissive]
我可以通过引用传递它,但问题是,如果从线程调用我的 lambda 并且向量将不再可用,它将超出范围。
我有 GLSL 移动着色器(ES 2.0),里面有这个:
float b = texture2D(t, texCoord).r;
float s = 0.0;
if (b > 240.0) s = b - 2322.2;
else if (b > 90.0) s = b - 74.0;
else if (b < 10.0) s = b / 10.0;
else s = b - 10.0;
Run Code Online (Sandbox Code Playgroud)
会不会很慢?我知道,应该避免着色器中的分支。有什么办法,如何重写这个来删除 ifs 吗?
我在代码中添加了对UIButton的约束:
topBtn.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
topBtn.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 50)
])
Run Code Online (Sandbox Code Playgroud)
稍后,如果我单击某个按钮,我希望删除此约束并将其更改为
NSLayoutConstraint.activate([
topBtn.topAnchor.constraint(equalTo: self.view2.topAnchor, constant: 50)
])
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?我试过了
NSLayoutConstraint.deactivate([
topBtn.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 50)
])
Run Code Online (Sandbox Code Playgroud)
但它没有效果,XCode抱怨我不能满足constarints.
我有C++ 14程序,它使用线程从大文件加载数据.我使用std::thread和在方法中,数据被加载.但是,在加载数据后,我需要通知主线程(GUI,控制台...),数据已准备就绪.我怎样才能做到这一点?
我找到了这个https://www.codeproject.com/Articles/16726/Cross-thread-calls-in-native-C,但它只是Windows.在Linux上,我可以使用信号和中断,但我不认为这是一个好主意.
有没有任何C++ 14机制,允许你在threadID上调用方法XY,操作系统会安排它吗?