小编ron*_*nag的帖子

C++ 11范围退出后卫,一个好主意?

我为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)

c++ c++11

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

GPU去隔行扫描

我有一个应用程序,使用OpenGL进行颜色变换,缩放和翻译等视频处理.我主要使用BGRA(1xGL_BGRA)或YUVA(4xGL_R)视频,即包括alpha.

现在我还想做一些高质量的去隔行扫描.我注意到Nvidia通过其"PureVideo"功能支持高质量的硬件加速去隔行扫描.基本上我想要做的是发送带有x个颜色通道的隔行扫描OpenGL纹理,并获得两个渐进纹理.

我的问题是如何最简单,最有效地访问此功能(可能与OpenGL互操作)?

我一直在关注DXVA和OpenMax,但两者似乎都专注于播放(不是去隔行处理,即非相关选项,如帧速率需要设置等等)和无alpha格式......

c++ windows opengl openmax dxva

21
推荐指数
1
解决办法
3631
查看次数

是否足以删除operator =(Type type)?

对于不可移动的类型,是否足够(从最佳实践角度来看)?

class A
{
   A(const A&) = delete;
   A(A&&) = delete;
   A& operator=(A) = delete;
public:
   A();
};
Run Code Online (Sandbox Code Playgroud)

或者我是否必须单独删除复制/移动赋值运算符?这里还需要一个析构函数?

c++ c++11

21
推荐指数
1
解决办法
328
查看次数

使用C++中的ffmpeg hwaccel

如何使用ffmpeg使用硬件加速解码文件?

我写了一个使用ffmpeg的工作视频播放器.我已经检查了支持使用"av_hwaccel_next"并找到了mpeg2_dxva.

但是,当我加载mpeg2文件(像往常一样)时,我没有得到任何硬件加速.AVCodecContext->hwaccel并且AVCodecContext->hwaccelcontext都是null.

我是否必须在某处传递一些标志才能启用hw-acceleration?

我无法找到任何关于此的信息,任何人都知道一个好的来源?

c++ ffmpeg hardware-acceleration

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

移动构造函数是否必须是noexcept?

我一直在阅读一些矛盾的文章,关于是否允许移动构造函数/赋值.

因此,我想问一下移动构造函数/赋值是否允许抛出最终的C++ 11标准?

c++ noexcept c++11

18
推荐指数
2
解决办法
2593
查看次数

自定义MediaStream

我通过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)

javascript html5 webkitaudiocontext

18
推荐指数
1
解决办法
930
查看次数

在C++中托管Silverlight

我在这里有点头脑,想要了解如何去做.

基本上我想要做的是能够在我的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)

c++ com silverlight atl

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

什么时候提升凤凰有用?

可能重复:
使用Boost.Phoenix有什么好处?

所以我开始阅读boost phoenix的文档.

但是,我必须承认我不太了解库的目的,特别是因为我们在C++ 0x中对lambdas有语言支持.

有人可以解释或给我一个例子吗?

boost boost-phoenix c++11

16
推荐指数
2
解决办法
2756
查看次数

VS11稳定,稳定吗?

我刚刚注意到以下代码<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哪个不稳定时,怎么能稳定?

c++ visual-c++ c++11 c++-chrono visual-studio-2012

15
推荐指数
3
解决办法
3299
查看次数

分析和优化编译

我项目的编译时间很长,我想尽可能减少这个.但是,现在我只是浏览我的项目并试图在纯粹的直觉上删除编译重的东西.

我希望能够在某种程度上剖析我的编译,这将为我提供有用的信息,我可以用它来确定我的编译时间大部分时间.

我已经尝试在Visual Studio中启用"Build Timing",但是这并没有给出比编译器执行的不同任务的时间更多的信息,因为知道大部分时间花在"CL"上并不是很有帮助.

有没有办法在较低级别(例如行或文件时间)分析编译?

c++ visual-studio-2010

14
推荐指数
1
解决办法
667
查看次数