我需要将绑定函数传递给另一个函数,但是我收到的错误是没有可用的转换 -
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) 如果我一次声明并定义一个原子指针 -
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)
还有其他方法可以原子地做同样的事情吗?我的理解有缺陷吗?
我有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哈希的集合
假设我们有一个结构如下 -
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) 我有一个项目,我需要用REDIS替换SQL DB.它是一个工作调度系统.有像JobInfo,TaskInfo,Result,BatchInfo等表.在REDIS服务器密钥值对中映射数据库表的最佳方法是什么?
项目中使用的查询类型有联接和分组.用redis服务器替换sql server的最佳方法是什么?redis还提供了一种方法,我可以查询数据,就像我可以通过查询加入和分组一样?
我试图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) 由智能指针管理的分配内存是否保证在发生异常时释放,例如下面?
#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析构函数中,但我没有看到它被调用.我认为应该自己清理内存.我是对的,还是不会被清理干净?
当比较值中包含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)