小编Mat*_*nti的帖子

使用Python爬行吗?

我想使用python编写搜寻器。这意味着:我已经获得了某些网站主页的URL,并且我希望我的程序能够通过停留在网站中的链接来爬网所有网站。如何快速轻松地做到这一点?我已经尝试过BeautifulSoup,但是它确实消耗CPU且在我的PC上非常慢。

python bots beautifulsoup web-crawler

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

返回带有函数捕获的lambda

在C ++ 11中,可以编写带有捕获的lambda(这太棒了!)

auto myfunc = [&] (int i) {return i + j;}; // j being somewhere in the lambda's context
Run Code Online (Sandbox Code Playgroud)

太棒了!但是,如果可以从一个函数甚至从另一个lambda返回这样的lambda,那将是非常好的。这有可能吗?

c++ lambda function c++11

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

linux下sem_open返回0

这听起来像是一个微不足道的问题,但我无法轻易找到解决方案。

这是我的代码:

#include <iostream>
#include <fcntl.h>
#include <semaphore.h>

using namespace std;

int main()
{
    sem_t * my_semaphore = sem_open("./my_semaphore", O_CREAT, 0755, 1);
    cout<<my_semaphore<<endl;
}
Run Code Online (Sandbox Code Playgroud)

这将打印出 0:未创建信号量。我究竟做错了什么?我在 OSX 环境中测试了这段代码,它运行得很好。

c++ linux semaphore

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

安全地将值写入磁盘

我有一个变量(固定大小).我的磁盘上有一个二进制文件,保存该变量.我的C++程序需要:

  • 从磁盘加载该变量的值
  • 更新磁盘上该变量的值

但是,我的程序运行的系统可能会出现电源故障:在某些时候,我的系统可能会随机断开电源,因此会在没有任何通知的情况下突然关闭.

因此,我需要在磁盘上完成或不完成更新操作.我试着弄清楚如何做这样的事情,但是人们永远无法确定做这种事情的最正确和最标准的方法是什么.我需要解决方案是跨平台的.因此,例如,据我所知,涉及在临时文件上写入新值然后重命名它的技巧仅适用于重命名操作是原子的POSIX兼容系统.

有全球运作的解决方案吗?我对性能感兴趣,因为该变量只需要偶尔更新一次.

c++ io atomic disk

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

AES_cbc_encrypt是否添加了填充?

考虑以下C++代码片段:

#include <iostream>
#include <openssl/aes.h>

#define AES_KEY_LENGTH 32

using namespace std;

int main()
{
    AES_KEY encryption_key;
    AES_KEY decryption_key;

    unsigned char key[AES_KEY_LENGTH] = {'t', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't'};

    unsigned char iv[AES_BLOCK_SIZE] = {'t', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't'};

    unsigned char iv_enc[AES_BLOCK_SIZE];
    unsigned char iv_dec[AES_BLOCK_SIZE]; …
Run Code Online (Sandbox Code Playgroud)

c++ openssl aes cbc-mode

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

包装模板回调?

立即回调

请考虑以下示例:

template <typename lambda> void call_me_back(const lambda & callback)
{
    // Very complicated calculation to find the meaning of everything

    callback(42);
}

int main()
{
    call_me_back([](const int & value)
    {
        std :: cout << value << std :: endl;
    });
}
Run Code Online (Sandbox Code Playgroud)

在这里,我提供call_me_back了一个接受一个的lambda int.经过一些长时间的计算后call_me_back调用callback,并callback打印出来.像蛋糕一样容易.

现在,根据执行情况,call_me_back需要callback使用int或使用其他类型调用.我们可以编辑前面的例子

template <typename lambda> void call_me_back(const lambda & callback)
{
    // Very complicated calculation to find the meaning of everything

    if(rand() …
Run Code Online (Sandbox Code Playgroud)

c++ lambda templates auto generic-lambda

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

在 Ubuntu 16.04 下运行协程示例给出“'experimental/coroutine' file not find”

查看 clang-5.0发行说明,它说“ C++ 协程 TS已落地”,并建议查看此示例以开始使用。我显然可以在线运行该示例,因此我决定在我的 Ubuntu Server 16.04 Xenial 机器上尝试一下。

从干净的安装中,我刚刚尝试过

wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main"
sudo apt-get update
sudo apt-get install -y clang-5.0 libc++-dev
Run Code Online (Sandbox Code Playgroud)

并直奔

clang++-5.0 -Wall -Wextra -std=gnu++2a "-fcoroutines-ts" "-stdlib=libc++" -o test.out test.cpp 
Run Code Online (Sandbox Code Playgroud)

(是上述示例test.cpp的复制和粘贴

然而,我只是得到

coroutines.cpp:2:10: fatal error: 'experimental/coroutine' file not found
#include <experimental/coroutine>
Run Code Online (Sandbox Code Playgroud)

所以我可以想象我缺少一些东西,无论是安装还是在编译标志中。我尝试在网上查找,但找不到任何有用的东西。

我究竟做错了什么?

c++ coroutine clang++

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

我可以有一个泛型函数来接受所有未实现特征的类型吗?

我知道我可以让函数只接受实现给定特征的类型。例如,我可以

fn f<T>()
where
    T: MyTrait,
{
    // Super useful stuff
}
Run Code Online (Sandbox Code Playgroud)

如果我想实现一个可以接受任何实现给定特征的函数,该怎么办?例如,假设我有一些计算,要么:

  • 需要一些已知的冗长的预处理,或者
  • 具有通过该快捷方式进行捷径的特定方式。

我想做的是这样的:

fn preprocess<T>(computation: &mut T)
where
    T: !Shortcut,
{
    // Carry out the expensive precomputation.
}
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚如何解决此问题,但似乎无法解决任何问题。

traits rust

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

返回数组大小的关联常量

考虑以下trait

pub trait Representable {
    const SIZE: usize;

    fn get(&self) -> [u8; SIZE];
    fn set(&mut self, value: [u8; SIZE]);
}
Run Code Online (Sandbox Code Playgroud)

我想为任何struct可以表示为固定大小的字节数组的对象实现它。为此,我添加了trait一个关联常量SIZE,使得返回get和接受的表示形式为set字节SIZE长。

但是,当我尝试编译时,我收到以下消息:

error[E0425]: cannot find value `SIZE` in this scope
 --> src/bytewise/representable.rs:4:27
  |
4 |     fn get(&self) -> [u8; SIZE];
  |                           ^^^^ not found in this scope

error[E0425]: cannot find value `SIZE` in this scope
 --> src/bytewise/representable.rs:5:35
  |
5 |     fn set(&mut self, value: [u8; SIZE]); …
Run Code Online (Sandbox Code Playgroud)

rust

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

将单个成员标记为私有

在C++中,我正在使用一个宏,我需要定义两个变量,第一个变量应该与定义它的范围具有相同的公共/私有/受保护状态,而另一个变量应该是私有的.但是,如果我这样做:

#define my_macro(a, b) int a;\
private: int b;
Run Code Online (Sandbox Code Playgroud)

然后我永久改变了范围!这个不好.所以我想知道:有没有办法说:"只有这个变量/成员/方法/类是私有的"?

我天真地尝试做类似的事情

class my_class
{
   public:

   int i;
   private int j;
};
Run Code Online (Sandbox Code Playgroud)

但没有运气.有什么方法可以得到我需要的东西吗?

编辑:我不确定定义宏的范围是公开的.正如我所说的那样," [...]第一个应该具有与定义它的范围相同的公共/私人/受保护状态 ",因此公共或私人或受保护,取决于范围.

c++ private public

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