小编use*_*270的帖子

如何将std :: bind对象传递给函数

我需要将绑定函数传递给另一个函数,但是我收到的错误是没有可用的转换 -

cannot convert argument 2 from 'std::_Bind<true,std::string,std::string (__cdecl *const )(std::string,std::string),std::string &,std::_Ph<2> &>' to 'std::function<std::string (std::string)> &'
Run Code Online (Sandbox Code Playgroud)

功能:

std::string keyFormatter(std::string sKeyFormat, std::string skey)
{
    boost::replace_all(sKeyFormat, "$ID$", skey);
    return sKeyFormat;
}
Run Code Online (Sandbox Code Playgroud)

用法如下 -

auto fun = std::bind(&keyFormatter, sKeyFormat, std::placeholders::_2);
client(sTopic, fun);
Run Code Online (Sandbox Code Playgroud)

客户端功能看起来像 -

void client(std::function<std::string(std::string)> keyConverter)
{
    // do something.
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

初始化原子指针原子?如果初始化或内存分配抛出会发生什么?

如果我一次声明并定义一个原子指针 -

std::atomic<int*> iptr = new int(1);    
std::atomic<T*> iptr = new T();
Run Code Online (Sandbox Code Playgroud)

据我所知,整个操作不是原子的.

new T()涉及分配内存,构造T对象,然后将其原子分配给iptr.T可以是简单的可构造的,在这种情况下,构造T不应该抛出但是一些用户定义的T MAY抛出.

如果在T构造或内存分配之间某些其他线程使用iptr怎么办?

这个操作真的是原子的吗?使其成为原子的一种方法是打破声明和定义,例如

T* temp = new T();
std::atomic<T*> iptr = temp;    
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以原子地做同样的事情吗?我的理解有缺陷吗?

c++ c++11 c++14

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

如何设计Redis数据结构以执行类似于Redis中的数据库查询的查询?

我有Job,JobInfo之类的表。我想执行以下查询-

“从作业J,JobInfo B中选择J.JobID,其中B.JobID = J.JobID AND BatchID = 5850 AND B.Status = 0 AND J.JobType <> 2”

我应该如何编写我的Redis数据类型,以便可以在Redis中映射此类查询?

如果我尝试将表作业的行映射到redis哈希中,例如(哈希j jobid 1状态2),类似地,再次将表JobInfo的行映射为redis哈希中(哈希jinfo jobid 1作业类型3。)

所以我的桌子可以是一组哈希。可以使用条目JobSet:jobid设置作业表,可以使用类似于JobInfoSet:jobid的条目设置JobInfo表

但是我对何时对JobSet和JobInfoSet进行SINTER感到困惑。我将如何查询该哈希以获取密钥?因为在set jobSet中的哈希内容与表JobInfoSet中的哈希内容不同(它们可能具有不同的键值对。

那么,作为SINTER的输出,我到底会得到什么?我将如何查询作为键值对的输出?

因此表将是redis哈希的集合

sql redis

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

std::atomic&lt;struct&gt; 是否使所有成员也是原子的?

假设我们有一个结构如下 -

struct test
{
    int a;
    int b;
};
Run Code Online (Sandbox Code Playgroud)

我创建了这个结构的原子变量并尝试更新 a 和 b。这些操作是原子的吗?使结构/类原子化是什么意思?

std::atomic<test> t;
t.a = 10;   // is this an atomic operation?
t.b = 20;   // is this an atomic operation?
// I understand a and b are not atomic in themselves but I am confused     
// as to when you say struct temp is atomic what does it mean?
// does it mean the t instance's this pointer is atomic?
Run Code Online (Sandbox Code Playgroud)

c++ multithreading c++11

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

在使用Redis替换sql DB时,redis是否可以支持sql join和group by等查询?

我有一个项目,我需要用REDIS替换SQL DB.它是一个工作调度系统.有像JobInfo,TaskInfo,Result,BatchInfo等表.在REDIS服务器密钥值对中映射数据库表的最佳方法是什么?

项目中使用的查询类型有联接和分组.用redis服务器替换sql server的最佳方法是什么?redis还提供了一种方法,我可以查询数据,就像我可以通过查询加入和分组一样?

sql redis

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

当使用std :: unique_ptr定义的一元op时,term不会在std算法中求值为1

我试图std::unique_ptr在std算法中使用仿函数,但如果我像这样使用它:

std::unique_ptr<IFormatter> format(new formatter("abcd"));
std::transform(vec.begin(), vec.end(), vec.begin(), *format.get()) 
Run Code Online (Sandbox Code Playgroud)

我收到编译错误说:

错误1错误C2064:term不评估为带有1个参数的函数.

完整程序如下:

#include <iostream>
#include <string>
#include<algorithm>
#include<vector>

using namespace std;

struct IFormatter
{
protected:
    std::string keyFormat;
    void fun(std::string& str)
    {
        // do something here.
    }
public:
    IFormatter(std::string keyFormat) : keyFormat(keyFormat) {}
    virtual std::string operator() (const std::string &key) = 0;
};

struct formatter : IFormatter
{
    formatter(std::string keyFormat) : IFormatter(keyFormat) {}
    std::string operator() (const std::string &key)
    {
            std::string s = keyFormat;
            fun(s);
            return s;
    }
};

int main()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ stl c++11

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

下面的C++ shared_ptr用法会不会有任何泄漏?

由智能指针管理的分配内存是否保证在发生异常时释放,例如下面?

#include <memory>

void test( std::shared_ptr<int> sptr )
{
    throw "exception";
}

int main()
{
    std::shared_ptr<int> ptr( new int(1) );
    test( ptr );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试执行代码,将断点放在shared_ptr析构函数中,但我没有看到它被调用.我认为应该自己清理内存.我是对的,还是不会被清理干净?

c++ smart-pointers c++11

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

memcmp为相同(零值)位域结构返回非零值

当比较值中包含0的两个位域结构时,我看到memcmp的意外输出.memcmp在输出中返回非零结果.

是否意味着比特位域不会引用可以保留任何东西?如果是这样(导致memcmp不可靠)比较包含位字段的任何内容的最佳方法是什么?我可以拥有自己的类或类型字段结构.

struct bitStruct{
    int b:4;
};
int test() 
{
    bitStruct s = {0};
    bitStruct zero = {0};
    cout << memcmp(&s, &zero, sizeof(s)); // this memcmp returns non-zero.
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++

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

标签 统计

c++ ×6

c++11 ×5

redis ×2

sql ×2

c ×1

c++14 ×1

multithreading ×1

smart-pointers ×1

stl ×1