高效处理为 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).