小编Nmd*_*ery的帖子

使用C++ 11可变参数模板在编译时快速排序

我刚刚通过使用C++ 11可变参数模板在编译时对其进行评估来实现快速排序算法.但是,当数据集太大时,我遇到性能问题.

#include <iostream>

using namespace std;

template<int... vs>
struct Seq
{}; 
template<int v1, int...vs>
struct Seq<v1, vs...>{
};


template<typename newT, typename srcT>
struct PushFront{
};
template<int vadded, int...vs>
struct PushFront<Seq<vadded>, Seq<vs...>>{
  typedef Seq<vadded, vs...> ResultType;
};

template<typename T>
struct PopFront{
};
template<int v1, int...vs>
struct PopFront<Seq<v1, vs...>>{
  typedef Seq<vs...> RemaindType;
  typedef Seq<v1>    ResultType;
};

template<typename T1, typename T2>
struct CatSeq{};
template<int...v, int...us>
struct CatSeq<Seq<v...>, Seq<us...>>{
  typedef Seq< v..., us... >  ResultType;
};


template<bool c, typename NewT, typename TrueClsT, typename …
Run Code Online (Sandbox Code Playgroud)

c++ metaprogramming quicksort variadic-templates c++11

30
推荐指数
2
解决办法
3126
查看次数

使用Boost Asio异步等待文件描述符

我正在尝试将D-Bus与我的boost::asio应用程序集成.

D-Bus有一个API,可以枚举一组要监视的Unix文件描述符(主要是套接字,但也可以是FIFO).当那些描述符有东西需要阅读时,我应该通知D-Bus API,这样它就可以读取它们并做到这一点.

目前我这样做:

using boost::asio::posix::stream_descriptor;
void read_handle(stream_descriptor* desc, const boost::system::error_code& ec,
                 std::size_t bytes_read)
{
    if (!ec) {
        stream_descriptor::bytes_readable command(true);
        descriptor->io_control(command);
        std::size_t bytes_readable = command.get();
        std::cout << "It thinks I should read" << bytes_readable
            << " bytes" << std::endl;
    } else {
        std::cout << "There was an error" << std::endl;
    }
}

void watch_descriptor(boost::asio::io_service& ios, int file_descriptor)
{
    // Create the asio representation of the descriptor
    stream_descriptor* desc = new stream_descriptor(ios);
    desc->assign(file_descriptor);

    // Try to read 0 bytes …
Run Code Online (Sandbox Code Playgroud)

c++ boost dbus boost-asio

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

异常运行提升asio ssl的例子

我正在尝试从boost :: asio运行SSL示例,当我运行它时,我得到一个"无效参数"异常.我在Linux x86_64上.

http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/ssl/client.cpp

http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/ssl/server.cpp

编译:

g++ server.cpp -o server -lboost_system -lssl
g++ client.cpp -o client -lboost_system -lssl
Run Code Online (Sandbox Code Playgroud)

运行如下:

$ ./server 
Usage: server <port>
$ ./server 10000
Exception: Invalid argument
$ ./server 1000
Exception: Permission denied
$ sudo ./server 1000
Exception: Invalid argument
Run Code Online (Sandbox Code Playgroud)

不确定是什么问题:(任何帮助将不胜感激.

谢谢!

c++ linux ssl boost boost-asio

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

Rails中Application Controller中的'protect_from_forgery'

config/application_controller.rb我的Rails应用程序目录中的文件中,我找到了以下代码:

class ApplicationController < ActionController::Base
  protect_from_forgery
end
Run Code Online (Sandbox Code Playgroud)

任何人都能告诉我project_from_forgery它的用法和原因是什么?

ruby-on-rails applicationcontroller

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

OpenCL GPU音频

关于这个问题并不多,也许是因为它首先不是一个好主意.

我想创建一个在GPU上运行的实时音频合成/处理引擎.这是因为我还将使用在GPU上运行的物理库,音频输出将由物理状态决定.GPU只承载音频输出而无法生成吗?如果我要在CPU上读回数据并将其输出到声卡,这是否意味着延迟大幅增加?我正在寻找合成和播放之间的时间间隔在10到20毫秒之间.

GPU会以任何有价值的数量加速合成吗?我将同时运行大量的合成器,我想每个合成器都可以采用自己的并行过程.AMD正在推出GPU音频,因此必须有一些东西.

audio real-time opencl

14
推荐指数
2
解决办法
8422
查看次数

如何使用Boost :: asio异步读取到std :: string?

我正在学习Boost :: asio和所有异步的东西.如何异步读取user_std :: string类型的变量?Boost::asio::buffer(user_)仅适用于async_write(),但不适用async_read().它适用于矢量,那么它不使用字符串的原因是什么?除了声明char user_[max_len]和使用之外,还有其他方法Boost::asio::buffer(user_, max_len)吗?

另外,继承boost::enable_shared_from_this<Connection>和使用shared_from_this()而不是thisin async_read()async_write()?的重点是什么?我在例子中看到了很多.

这是我的代码的一部分:

class Connection
{
    public:

        Connection(tcp::acceptor &acceptor) :
            acceptor_(acceptor), 
            socket_(acceptor.get_io_service(), tcp::v4())
        { }

        void start()
        {
            acceptor_.get_io_service().post(
                boost::bind(&Connection::start_accept, this));
        }

    private:

        void start_accept()
        {
            acceptor_.async_accept(socket_, 
                boost::bind(&Connection::handle_accept, this, 
                placeholders::error));
        }

        void handle_accept(const boost::system::error_code& err)
        {
            if (err)
            {
                disconnect();
            }
            else
            {
                async_read(socket_, boost::asio::buffer(user_),
                    boost::bind(&Connection::handle_user_read, this,
                    placeholders::error, placeholders::bytes_transferred));
            }
        }

        void …
Run Code Online (Sandbox Code Playgroud)

string boost asynchronous boost-asio

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

如何在asio :: buffer()中使用std :: string

当我尝试使用带有boost :: asio :: buffer的std :: string时,我收到以下错误消息:

boost/asio/detail/consume_buffers.hpp:在构造函数'boost :: asio :: detail :: consume_buffers <boost :: asio :: mutable_buffer,boost :: asio :: const_buffers_1

:: consume_buffers(const boost :: asio :: const_buffers_1&)':boost/asio/impl/read.hpp:140:25:
从'boost :: asio :: detail :: read_op <boost :: asio ::实例化basic_stream_socket,boost :: asio :: const_buffers_1,boost :: asio :: detail :: transfer_all_t,boost :: _ bi :: bind_t <void,boost :: _ mfi :: mf1,boost :: _ bi :: list2,boost :: arg <1>(*)()>

:: read_op(boost :: asio :: basic_stream_socket&,const boost :: asio :: …

buffer boost boost-asio

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

C++中的可扩展服务器框架

我期待用C++编写一个服务器应用程序,用于同时处理数万个客户端.它应该在Windows和Linux下运行.我一直在寻找框架和库,并遇到了Boost Asio,这似乎是一个非常成熟和广泛使用的替代品.我只是在绞线/线程池周围缠绕我很困难,主要是因为有数百万个模板.我的背景主要是在C中,所以我并不习惯Boost一般似乎充满了模板的混乱.我试图找人开发围绕升压短耳相对较薄的包装将采用股,绑定等的照顾线程/同步方面的,但一直未能找到一个还没有谁可以在我的预算之内做到这一点(2或300美元).

您是否可以推荐任何其他可扩展的库以及Boost Asio(例如,在Windows上使用IOCP,在Linux上使用epoll等),或者我可能会找到熟练的Boost开发人员寻找较小的自由职业的来源?

非常感谢您的任何帮助.

亲切的问候,

Philip Bennefall

c++ epoll iocp scalable boost-asio

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

read_some/write_some和receive/send之间的区别?

我开始使用Boost Asio的TCP套接字.是什么区别read_somereceive与之间有什么区别write_somesend?谢谢!

c++ boost boost-asio

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

使用boost :: asio发送Protobuf消息

我试图使用Google的Protocol Buffers和boost :: asio在C++中一起破解客户端.

我的问题是我不知道如何将protobuf消息提供给asio.我有的是这个:

// set up *sock - works
PlayerInfo info;
info.set_name(name);
// other stuff
Run Code Online (Sandbox Code Playgroud)

现在我知道以下是错误的,但我会发布它:

size_t request_length = info.ByteSize();
boost::asio::write(*sock, boost::asio::buffer(info, request_length));
Run Code Online (Sandbox Code Playgroud)

我知道我必须以不同的方式将我的信息打包到缓冲区 - 但是如何?

一般来说,我很难搞清楚boost :: asio是如何工作的.有一些教程,但它们通常只包括发送标准数据格式,如ints,它是开箱即用的.我认为我的问题是序列化,但另一方面我了解到protobuf应该为我做这个......现在我很困惑;)

谢谢你的帮助!

- > Daniel Gehriger提供了解决方案,非常感谢!

c++ networking boost protocol-buffers boost-asio

11
推荐指数
1
解决办法
6405
查看次数