高效处理为 redis (hiredis) 的 SET 命令创建模板
efficient handling of creating a template for SET command of redis (hiredis)
我是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)
.
我是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)
.