美文网首页
template 模板

template 模板

作者: 菜菜子MJ | 来源:发表于2021-03-11 16:37 被阅读0次

两种通式:函数模板通式,类模板通式

一、函数模板通式

template <class 形参名,class 形参名,...> 返回类型 函数名(参数列表)
{
    ... //函数体
}

二、类模板通式

template<class  形参名,class 形参名,…> class 类名{
    ...//类定义
};

三种类型的模板形参:类型形参,非类型形参和模板形参。

一、类型形参

二、非类型形参

1.模板的非类型形参只能是整型,指针和引用。可转化为整形的类型都可以作为形参,比如int,char,long,unsigned,bool,short(enum声明的内部数据可以作为实参传递给int,但是一般不能当形参),参考image1.png
2.非类型形参在模板定义的内部是常量值,必须能在编译时计算出结果
3.非类型形参一般不应用于函数模板中
用法一:https://stackoverflow.com/questions/23711389/template-with-bool-parameter
用法二:

template<bool B> class KaldiCompileTimeAssert { };
template<> class KaldiCompileTimeAssert<true> {
 public:
  static inline void Check() { }
};

#define KALDI_COMPILE_TIME_ASSERT(b) KaldiCompileTimeAssert<(b)>::Check()

#define KALDI_ASSERT_IS_INTEGER_TYPE(I) \
  KaldiCompileTimeAssert<std::numeric_limits<I>::is_specialized \
                 && std::numeric_limits<I>::is_integer>::Check()

#define KALDI_ASSERT_IS_FLOATING_TYPE(F) \
  KaldiCompileTimeAssert<std::numeric_limits<F>::is_specialized \
                && !std::numeric_limits<F>::is_integer>::Check()

三、模板形参

新用法

一、后置返回值类型(trailing return type)

使用形参类型推导返回值类型,需要后置返回值类型,并用auto占位

template<typename T, typename Y>
auto add(T v1, Y v2) -> decltype(v1 + v2)
{
    return v1 + v2;
}

参考

image1.png

相关文章

网友评论

      本文标题:template 模板

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