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

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

template <typename T, typename... U>
int add_value(T &&a, U &&... b)
{
    return a + add_value(std::forward<U>(b)...);
}
  • C++的可变参数宏和C++可变模板参数的使用
struct string_cat_functor
{
public:
    std::string operator()(void)
    {
        return {};
    }
    template<typename T, typename ...ARGS>
    std::string operator ()(T&& value, ARGS&&... args)
    {
        os << value;
        operator()(std::forward<ARGS&&>(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));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。