C++ 完美转发和可变模板参数

  • 关于C++的完美转发
template 
int add_value(T &&a)
{
    return a;
}

template 
int add_value(T &&a, U &&... b)
{
    return a + add_value(std::forward(b)...);
}
  • C++的可变参数宏和C++可变模板参数的使用
struct string_cat_functor
{
public:
    std::string operator()(void)
    {
        return {};
    }
    template
    std::string operator ()(T&& value, ARGS&&... args)
    {
        os << value;
        operator()(std::forward(args)...);
        return os.str();
    }
private:
    std::stringstream os;
};

#define LOG_FATAL(args...)    L_FATAL(string_cat_functor()(args).data());
#define LOG_ERROR(args...)    L_ERROR(string_cat_functor()(args).data());
#define LOG_WARN(args...)     L_WARN(string_cat_functor()(args).data());
#define LOG_NOTE(args...)     L_NOTE(string_cat_functor()(args).data());
#define LOG_INFO(args...)     L_INFO(string_cat_functor()(args).data());
#define LOG_DEBUG(args...)    L_DEBUG(string_cat_functor()(args).data());
  • 使用方式
LOG_WARN ("Increase the boundary: " , "(offset: " , offset , ", length: ",length,")" , " to - " , variable_types.at(index));

你可能感兴趣的:(C++ 完美转发和可变模板参数)