我为C++ 11编写了一个小实用程序类,我将其用作范围保护,以便更轻松地处理异常安全和类似的事情.
看起来有点像黑客.但我很惊讶我没有在使用C++ 11功能的其他地方看到它.我认为boost与C++ 98类似.
但这是个好主意吗?或者是否有我错过的潜在问题?在boost或类似的解决方案中是否已经有类似的解决方案(使用C++ 11功能)?
namespace detail
{
template<typename T>
class scope_exit : boost::noncopyable
{
public:
explicit scope_exit(T&& exitScope) : exitScope_(std::forward<T>(exitScope)){}
~scope_exit(){try{exitScope_();}catch(...){}}
private:
T exitScope_;
};
template <typename T>
scope_exit<T> create_scope_exit(T&& exitScope)
{
return scope_exit<T>(std::forward<T>(exitScope));
}
}
#define _UTILITY_EXIT_SCOPE_LINENAME_CAT(name, line) name##line
#define _UTILITY_EXIT_SCOPE_LINENAME(name, line) _UTILITY_EXIT_SCOPE_LINENAME_CAT(name, line)
#define UTILITY_SCOPE_EXIT(f) const auto& _UTILITY_EXIT_SCOPE_LINENAME(EXIT, __LINE__) = ::detail::create_scope_exit(f)
Run Code Online (Sandbox Code Playgroud)
并且使用了类似的东西.
int main ()
{
ofstream myfile;
myfile.open ("example.txt");
UTILITY_SCOPE_EXIT([&]{myfile.close();}); // Make sure to close file even in case of exception
myfile << "Writing …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,使用OpenGL进行颜色变换,缩放和翻译等视频处理.我主要使用BGRA(1xGL_BGRA)或YUVA(4xGL_R)视频,即包括alpha.
现在我还想做一些高质量的去隔行扫描.我注意到Nvidia通过其"PureVideo"功能支持高质量的硬件加速去隔行扫描.基本上我想要做的是发送带有x个颜色通道的隔行扫描OpenGL纹理,并获得两个渐进纹理.
我的问题是如何最简单,最有效地访问此功能(可能与OpenGL互操作)?
我一直在关注DXVA和OpenMax,但两者似乎都专注于播放(不是去隔行处理,即非相关选项,如帧速率需要设置等等)和无alpha格式......
对于不可移动的类型,是否足够(从最佳实践角度来看)?
class A
{
A(const A&) = delete;
A(A&&) = delete;
A& operator=(A) = delete;
public:
A();
};
Run Code Online (Sandbox Code Playgroud)
或者我是否必须单独删除复制/移动赋值运算符?这里还需要一个析构函数?
如何使用ffmpeg使用硬件加速解码文件?
我写了一个使用ffmpeg的工作视频播放器.我已经检查了支持使用"av_hwaccel_next"并找到了mpeg2_dxva.
但是,当我加载mpeg2文件(像往常一样)时,我没有得到任何硬件加速.AVCodecContext->hwaccel并且AVCodecContext->hwaccelcontext都是null.
我是否必须在某处传递一些标志才能启用hw-acceleration?
我无法找到任何关于此的信息,任何人都知道一个好的来源?
我一直在阅读一些矛盾的文章,关于是否允许移动构造函数/赋值.
因此,我想问一下移动构造函数/赋值是否允许抛出最终的C++ 11标准?
我通过websockets接收原始float32音频,并希望在浏览器中播放.根据我的理解,我需要使用MediaStream API.但是,我找不到一种方法来创建一个可以附加数据缓冲区的MediaStream.
实现这个目标的正确方法是什么?
我正在尝试这样的事情:
var context = new AudioContext();
context.sampleRate = 48000;
var stream = null; // ????
var source = context.createMediaStreamSource(stream);
source.connect(context.destination);
source.start(0);
socket.onmessage = function (event) {
stream.appendBuffer(new Float32Array(event.data)); // ????
};
Run Code Online (Sandbox Code Playgroud) 我在这里有点头脑,想要了解如何去做.
基本上我想要做的是能够在我的C++应用程序中呈现和控制silverlight.我想要的东西是:
class silverlight_host
{
public:
// Prio 1
silverlight_host(const std::string& filename); // Load a xap file
void draw(void* dest); // Draw with alpha to dest
std::pair<size_t, size_t> get_size(); // Need to know required size of dest
// Prio 2
bool is_dirty() const; // Check for dirty rect since last call to draw
void send_param(const std::string& param); // Send data to silverlight control or call functions. Alternative name maybe, call_function
void set_size(size_t width, size_t height); // Set the size of …Run Code Online (Sandbox Code Playgroud) 可能重复:
使用Boost.Phoenix有什么好处?
所以我开始阅读boost phoenix的文档.
但是,我必须承认我不太了解库的目的,特别是因为我们在C++ 0x中对lambdas有语言支持.
有人可以解释或给我一个例子吗?
我刚刚注意到以下代码<chrono.h>,这对我来说没有意义.
struct system_clock
{
static const bool is_monotonic = false; // retained
static const bool is_steady = false;
};
class steady_clock
: public system_clock
{ // wraps monotonic clock
public:
static const bool is_monotonic = true; // retained
static const bool is_steady = true;
};
typedef steady_clock monotonic_clock; // retained
typedef system_clock high_resolution_clock;
Run Code Online (Sandbox Code Playgroud)
steady_clock当它简单地从system_clock哪个不稳定时,怎么能稳定?
我项目的编译时间很长,我想尽可能减少这个.但是,现在我只是浏览我的项目并试图在纯粹的直觉上删除编译重的东西.
我希望能够在某种程度上剖析我的编译,这将为我提供有用的信息,我可以用它来确定我的编译时间大部分时间.
我已经尝试在Visual Studio中启用"Build Timing",但是这并没有给出比编译器执行的不同任务的时间更多的信息,因为知道大部分时间花在"CL"上并不是很有帮助.
有没有办法在较低级别(例如行或文件时间)分析编译?
c++ ×8
c++11 ×5
atl ×1
boost ×1
c++-chrono ×1
com ×1
dxva ×1
ffmpeg ×1
html5 ×1
javascript ×1
noexcept ×1
opengl ×1
openmax ×1
silverlight ×1
visual-c++ ×1
windows ×1