如何通过C++ 11 lambda中的move(也称为右值引用)捕获?
我想写这样的东西:
std::unique_ptr<int> myPointer(new int);
std::function<void(void)> example = [std::move(myPointer)]{
*myPointer = 4;
};
Run Code Online (Sandbox Code Playgroud) 我正在尝试捕获屏幕图像以用于截屏.因此我需要一个快速的解决方案,并且不能依赖shell程序,如import或xwd.
这是我到目前为止编写的代码,但是它失败并且给了我一个垃圾图像,它似乎只是显示了奇怪颜色的几个图像的片段.
http://s9.postimage.org/dqnkgkwr1/blah.png
关于我做错了什么的任何想法?
#include <X11/Xlib.h>
#include <X11/X.h>
#include <cstdio>
#include <CImg.h>
using namespace cimg_library;
int main()
{
Display *display = XOpenDisplay(NULL);
Window root = DefaultRootWindow(display);
XWindowAttributes gwa;
XGetWindowAttributes(display, root, &gwa);
int width = gwa.width;
int height = gwa.height;
XImage *image = XGetImage(display,root, 0,0 , width,height,AllPlanes, ZPixmap);
unsigned char *array = new unsigned char[width * height * 3];
unsigned long red_mask = image->red_mask;
unsigned long green_mask = image->green_mask;
unsigned long blue_mask = image->blue_mask;
for (int x = 0; x < …
Run Code Online (Sandbox Code Playgroud) 我需要与std :: bind相反的东西,它将伪参数添加到函数签名而不是boost :: bind如何绑定参数.
我有这个功能:
std::function<void (void)> myFunc;
Run Code Online (Sandbox Code Playgroud)
但是我想把它转换成一个std::function<void(int)>
传递给这个函数
void processFunction( std::function<void(int)> func);
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个配置管理器类,它可以通过std :: string存储任意对象.
我的界面(抽象基类)的开始是这个(当然这非常不完整)
class ConfigurationManager
{
public:
static boost::shared_ptr<ConfigurationManager> create();
template<typename T>
virtual T getOption(const std::string& name) = 0;
};
Run Code Online (Sandbox Code Playgroud)
但后来我的编译器指出模板不能是虚拟的(然后我意识到我无论如何也无法导出模板).
在内部我将使用boost :: any(几乎是运行时检查的void*),但我不想在我的界面中公开boost :: any.
最好的方法是什么?
有人可以建议学习OpenGL 3.2核心配置文件的指南吗?
SDK很难阅读,我见过的大部分指南都只教授旧方法.
有没有什么方法可以与boost :: asio一起使用线程安全的协同程序?
我想让一个人io_service
在多个线程上运行,并让我的一些处理程序成为协同程序.
Boost.Coroutine似乎是一个解决方案,但他们证明他们不支持恢复在一个单独的线程中启动的协同程序.
据我所知,这个问题只有两种可能的解决方案:
两者都没有任何好的解决方案.在一个解决方案中,我失去了协同程序.在另一方面,我失去了大部分的多线程能力.
几天前,我开始重构一些代码以使用新的Java 8 Streams库.不幸的是,我在使用一个方法执行Stream :: map时遇到了编译时错误,该方法被声明为抛出一个进一步指定为RuntimeException的泛型E.
有趣的是,当我切换到使用方法引用时,编译时错误就消失了.
这是一个错误,还是我的方法引用不等同于我的lambda表达式?
(另外,我知道我可以用Parameter :: execute替换p-> p.execute(foo).我的实际代码有execute方法的附加参数).
错误信息
Error:(32, 43) java: unreported exception E; must be caught or declared to be thrown
Run Code Online (Sandbox Code Playgroud)
码
import java.util.ArrayList;
import java.util.List;
public class JavaBugTest
{
interface AbleToThrowException<E extends Exception>
{
}
interface Parameter {
public <E extends Exception> Object execute(AbleToThrowException<E> algo) throws E;
}
interface ThrowsRuntimeException extends AbleToThrowException<RuntimeException>
{
}
static ThrowsRuntimeException foo;
public static Object manualLambda(Parameter p)
{
return p.execute(foo);
}
public static void main(String[] args)
{
List<Parameter> params …
Run Code Online (Sandbox Code Playgroud) 每当我检查是否支持GtkLookAndFeel时,我遇到了JRE崩溃的问题.令人惊讶的是,这个错误似乎只出现在Oracle JRE上.
到目前为止,我已经测试了三个JRE的行为:
(我正在使用所有这些的64位版本)
以下是触发此错误的代码:
import javax.swing.LookAndFeel;
public class Test
{
public static void main(String[] args)
{
LookAndFeel currLAF = new com.sun.java.swing.plaf.gtk.GTKLookAndFeel();
currLAF.isSupportedLookAndFeel();
System.out.println("I am exiting main");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是结果输出:
I am exiting main
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f91fe0fdbe0, pid=332, tid=140265730119424
#
# JRE version: Java(TM) SE Runtime Environment (7.0_67-b01) (build 1.7.0_67-b01)
# Java VM: Java …
Run Code Online (Sandbox Code Playgroud) 有没有办法从javascript后期渲染的页面中检索完全渲染的html?如果我使用curl,它只是检索基本的html,但缺少iframe的后期呈现,javascript处理等.
实现这一目标的最佳方法是什么?
可能重复:
C++:删除这个?
我正在尝试创建一个管理游戏状态的系统.
我当前设计的问题是,当我切换状态时,在控制切换到新状态之前删除旧状态.
以下是我的代码的简化版本:
class StateManager;
class State
{
public:
virtual void update(StateManager &manager)= 0;
virtual ~State(){}
};
class StateManager
{
public:
void setState(std::unique_ptr<State> && newState )
{
currentState = std::move(newState);
}
std::unique_ptr<State> currentState;
void run()
{
currentState->update(*this);
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,如果State对象在update方法中调用StateManager :: setState,则会有一段时间在刚刚销毁的对象上调用成员函数.
有关此行为的完整示例,请访问http://ideone.com/WHLzJL.注意在FirstState :: update返回之前如何调用FirstState的析构函数.
这是C++中未定义的行为吗?如果是这样,我应该如何改变我的设计?