美文网首页
c++模板函数的重载

c++模板函数的重载

作者: help_youself | 来源:发表于2020-01-16 20:49 被阅读0次

 代码来自于facebook的folly库。
cursor.h

#pragma once
#include <iostream>
namespace zsy{
template <class Derived>
class Writable{
public:
  template <class T>
  typename std::enable_if<std::is_arithmetic<T>::value>::type write(T value) {
    const uint8_t* u8 = reinterpret_cast<const uint8_t*>(&value);
    Derived* d = static_cast<Derived*>(this);
    d->push(u8, sizeof(T));
  }
  template <class T>
  void writeLE(T value) {
    Derived* d = static_cast<Derived*>(this);
    d->write(value);
  }
  void push(const uint8_t* buf, size_t len) {
    Derived* d = static_cast<Derived*>(this);
    if (d->pushAtMost(buf, len) != len) {
    }
  }
};
class RWCursor:public Writable<RWCursor>{
public:
    size_t pushAtMost(const uint8_t* buf, size_t len){
        std::cout<<__FUNCTION__<<std::endl;
        return len;
    }
};
class QueueAppender:public Writable<QueueAppender>{
public:
  template <class T>
  typename std::enable_if<std::is_arithmetic<T>::value>::type write(T value){
    std::cout<<"queue "<<__FUNCTION__<<value<<std::endl;
  }
    size_t pushAtMost(const uint8_t* buf, size_t len){
        std::cout<<"queue "<<__FUNCTION__<<std::endl;
        return len;
    }
};
}

test.cc

#include <iostream>
#include "cursor.h"
int main(){
    zsy::RWCursor rw;
    uint32_t len=32;
    rw.writeLE(len);
    zsy::QueueAppender appender;
    appender.writeLE(len+1);
    return 0;
}

相关文章

  • Geekband C++ 第五周

    概述 C++模板简介 函数模板 C++类模板 操作符重载 泛型编程 容器

  • 17 基于类型属性的重载

    基于模板实参属性重载函数模板是很自然的需求,比如 然而,C++现在还不提供任何直接表达基于类型属性重载的方法,两个...

  • 《C++ Primer Plus》:函数探幽

    本章内容概览 内联函数 引用变量 按引用传递函数参数 默认参数 函数重载 函数模板 内联函数 内联函数是C++为提...

  • 【C++ Templates(18)】基于类型属性的重载

    想基于模板实参属性重载函数模板是很自然想做的,如 然而,C++现在还不提供任何直接表达基于类型属性重载的方法,两个...

  • C++ 函数模板template

    C++可以实现函数的重载,而有一些函数只是参数不同,函数体完全一样,这样的函数可以用一个函数模板来简化: 模板的一...

  • 第八章 函数探幽(1)c++内联函数

    c++赋予了一些新的关于函数的特性,包括,内联函数,按引用传递变量,默认的参数值,函数重载(多态),以及模板函数...

  • c++模板函数的重载

     代码来自于facebook的folly库。cursor.h test.cc

  • 2.C++对C的扩展

    重载(overload) C++中,引用了函数重载的概念,函数名同名,参数列表不同形成重载。重载规则: 函数名相同...

  • Vue3源码中的TypeScript重载函数的作用

    TypeScript重载函数的作用案例 C++中的一个概念(百度百科): 函数重载一般指重载函数。 重载函数是函数...

  • C++ 重载函数与模板函数

    Overloaded functions 重载函数 在C ++中,如果参数不同,则两个不同的函数可以具有相同的名称...

网友评论

      本文标题:c++模板函数的重载

      本文链接:https://www.haomeiwen.com/subject/dcdqzctx.html