小编Fre*_*rik的帖子

是否可以将boost :: system :: error_code转换为std:error_code?

我想尽可能地用标准C++中的等价物替换外部库(如boost),如果它们存在且可能,最小化依赖性,因此我想知道是否存在转换boost::system::error_code为安全的方法std::error_code.伪代码示例:

void func(const std::error_code & err)
{
    if(err) {
        //error
    } else {
        //success
    }
}

boost::system::error_code boost_err = foo(); //foo() returns a boost::system::error_code
std::error_code std_err = magic_code_here; //convert boost_err to std::error_code here
func(std_err);
Run Code Online (Sandbox Code Playgroud)

最重要的不是完全相同的错误,只是尽可能接近,最后如果是错误.有智能解决方案吗?

提前致谢!

c++ boost std error-code

17
推荐指数
2
解决办法
9339
查看次数

如何使boost unordered_map支持flyweight <string>

我正在尝试执行以下操作:

boost::unordered_map<boost::flyweight<std::string>, boost::flyweight<std::string> > map;

        boost::flyweight<std::string> foo(name);
        map[foo] = foo;
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨:"错误C2665:'boost :: hash_value':17个重载中没有一个可以转换所有的参数类型".

但我已经定义了以下功能:

std::size_t hash_value(const boost::flyweight<std::string> & b)
{
    boost::hash<std::string> hasher;
    const std::string & str = b.get();
    return hasher(str);
}
bool operator==(const boost::flyweight<std::string>& f, const boost::flyweight<std::string> & second)
{
    return f.get() == second.get();
}
Run Code Online (Sandbox Code Playgroud)

但它没有编译.

我需要做些什么才能使boost unordered_map支持flyweight?

[编辑]我使用以下代码:

    struct flyweight_hash
    {
        std::size_t operator()(const boost::flyweight<std::string> &elm) const
        {
            boost::hash<std::string> hasher;
            const std::string & str = elm.get();
            return hasher(str);
        }
    };
Run Code Online (Sandbox Code Playgroud)

并将其作为模板参数传递给地图的构造:

boost::unordered_map<boost::flyweight<std::string>, boost::flyweight<std::string> , flyweight_hash > map;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不明白重载hash_value没有工作的方式.

c++ boost unordered-map flyweight-pattern

10
推荐指数
2
解决办法
1982
查看次数

为什么命名参数不经常使用?

我设计了一个参数类,允许我编写如下代码:

//define parameter
typedef basic_config_param<std::string> name;

void test(config_param param) {

  if(param.has<name>()) { //by name
    cout << "Your name is: " << param.get<name>() << endl;
  }

  unsigned long & n = param<ref<unsigned long> >(); //by type
  if(param.get<value<bool> >(true)) { //return true if not found
    ++n;
  }
}


unsigned long num = 0;
test(( name("Special :-)"), ref<unsigned long>(num) )); //easy to add a number parameter
cout << "Number is: " << num; //prints 1
Run Code Online (Sandbox Code Playgroud)

类的性能非常快:一切都只是堆栈的引用.为了保存所有信息,我在使用最多5个参数的内部缓冲区进行堆分配之前减少每个对象的大小,但这很容易改变.

为什么这种语法不经常使用,重载operator,()以实现命名参数?是因为潜在的性能损失?

另一种方法是使用命名的习语:

object.name("my name").ref(num); //every …
Run Code Online (Sandbox Code Playgroud)

c++ named-parameters

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

Socket.IO:如何删除命名空间

我需要能够即时构建和销毁socket.io名称空间.很容易找到如何创建命名空间的信息,但我没有发现如何删除/断开命名空间以释放其内存.

假设我已经运行了以下代码:

var nsp = io.of('/my-namespace');
nsp.on('connection', function(socket){
  console.log('someone connected'):
});
nsp.emit('hi', 'everyone!');
Run Code Online (Sandbox Code Playgroud)

如何断开/删除上面创建的socket.io命名空间?

namespaces node.js socket.io socket.io-1.0

7
推荐指数
2
解决办法
4218
查看次数

UDP数据包是否保证完整,实用意义,如果交付?

众所周知,UDP(用户数据报协议)是不安全的,因为与它一起发送的数据包的顺序可能无法按顺序传递,甚至根本不可能.但是,如果传送UDP数据包.实际意义上(99.99%及以上)的数据包中的信息是否保证是正确的?

在实际意义上(99.99%及以上),UDP数据包是否被保证完整(未损坏)?

提前致谢!

security udp network-programming packets

3
推荐指数
1
解决办法
207
查看次数

一次性密码算法(基于材料,基于时间和基于行动)

我正在尝试开发一个网站和相应的帮助程序(安装在用户计算机上).网站和程序将相互通信(主要是AJAX),但如果任何其他网页可以向程序发送请求,则存在很大的安全风险.我想提出一个解决方案,这使得向我的程序(安装在用户计算机上)注入欺诈请求非常困难.我的想法是使用一次性密码,但我的安全知识有限,因此请问您的想法.

我想出了这个一次性密码算法(伪):

function otp(seed, counter, unix_timestamp, action)
{
    for(i = 0; i < counter; ++i)
    {
        seed = sha256(seed + i);
    }
    str = seed;

    str = sha256(str + unix_timestamp/60);
    str = sha256(str + action);
    otp = substr(str,0,4); //Convert the first for bytes to an int.
    return (int)otp;
}
Run Code Online (Sandbox Code Playgroud)

它应该具有以下属性:

  • 只能使用一次,(每个otp一代都会"反"增加=>新种子)
  • 每分钟都会改变(取决于时间).
  • 绑定到一个动作(登录,...),它取决于具体的行动.
  • 可以轻松单独生成,以后再进行同步.

如果每个请求都包含OTP代码和计数器值,这是否安全?如果没有,你有什么建议来完成这个?我真的想要上面提到的所有属性.

提前致谢.

security algorithm one-time-password

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