gpt4 book ai didi

c++ - 高效处理为redis(hiredis)的SET命令创建模板

转载 作者:行者123 更新时间:2023-12-01 16:55:07 25 4
gpt4 key购买 nike

我是 redis 新手。我想编写一个位于hiredis顶层的简单库(用于测试)。例如,为了实现 SET 命令,我编写了以下代码:

#include<iostream>
#include<type_traits>
#include<hiredis.h>
#include<string>

using namespace std;

template<typename T>
string set(string key, T value)
{
/* set a key */
if(is_same<T, int>::value)
{
reply = (redisReply*) redisCommand(c, "SET %s %d", key, value) // c is redisContext*
}
else if(is_same<T, string>::value)
{
reply = (redisReply*) redisCommand(c, "SET %s %s", key, value)
}

// and so on for other data types ...

string replyStr = reply->str;
freeReplyObject(reply);
return replyStr;
}

是否有更好的解决方案来处理不同数据类型作为 SET 命令的值? (我的意思是避免对每种数据类型使用 If 语句)。问候。

最佳答案

如果我理解正确,您只需要知道 value 的类型,就可以知道在编写回复时在 redisCommand 字符串中插入的类型。

如果您将这些类型限制为基本类型,请尝试在 value 上调用 to_string 以构建结果 std::string

了解更多信息https://en.cppreference.com/w/cpp/string/basic_string/to_string当然不要忘记包含!

类似这样的东西:

template<typename T>
string set(string key, T value)
{
std::string result(std::string("SET ") + to_string(key) + to_string(value));
reply = (redisReply*) redisCommand(c, result);

string replyStr = reply->str;
freeReplyObject(reply);
return replyStr;
}

编辑:另一个可行的解决方案是每次调用“set”时简单地转换变量,并将函数重写为string set(string key, string value)

关于c++ - 高效处理为redis(hiredis)的SET命令创建模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59861308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com