类模板参数带默认值

类模板参数可以带默认值吗?答案当然是肯定的。看过STL源码的人就知道,STL里面大量使用了模板技术。

有兴趣的可以去看看STL的源码,从中可以学到不少知识。

今天,我就写一个带默认值的类模板,如下:

#pragma once

template<typename T, typename T defValue = NULL>
class CType
{
public:
    CType()
        :m_value(defValue)
    {
    }
    ~CType()
    {
    }
    BOOL IsNull() const
    {
        return (defValue == m_value);
    }

private:
    T m_value;
};

使用起来也简单,如下:

CType<HANDLE, INVALID_HANDLE_VALUE> winHandle;
BOOL bNull = winHandle.IsNull();

CType<HANDLE> nHandle;
bNull = nHandle.IsNull();

CType<int*> intType;
bNull = intType.IsNull();

是不是很方便,不用去考虑很多细节。

原文地址:https://www.cnblogs.com/sooksjb/p/9290956.html

时间: 2024-10-27 05:23:49

类模板参数带默认值的相关文章

类模板成员函数默认值问题:an out-of-line definition of a member of a class template cannot have default arguments

template <typename T> class A { void fun(int a = 0); }; template<typename T> void A<T>::fun(int a = 0) { /* */ } 对于类似上文代码,VS编译器会报 "an out-of-line definition of a member of a class template cannot have default arguments"错误. 其原因在

类模板参数

实际上有三种类型模板参数:类型模板参数.无类型模板参数和模板模板参数(以模板作为模板的参数). 1.类型模板参数 类型模板参数是我们使用模板的主要目的.我们可以定义多个类型模板参数: template<typename T,typename Container> class Grid {...} 同样,也可以为类型模板参数指定默认值: #include <iostream> using std::vector; template<typename T,typename Con

C++函数带默认值的几种情形

1. 默认参数的规则 默认值定义 C++支持函数参数带默认值.这里所谓的默认值,指的是在调用函数时,可以不指定某些参数,编译器会自动把默认值传递到函数调用中. 默认值位置 指定默认值的参数必须位于形参列表最右端,从右往左.否则会出现二义性,编译器无法处理. 默认值设置 默认值可以在函数声明或函数定义中设置,只要保证不出现参数重定义即可. 2.默认参数示例 在函数声明中设置默认值 这是最常见的一种情形.主要有以下两种声明方式: 声明中给参数赋默认值 声明中用类型指定默认值 float area(f

C# 方法中带默认值的参数

设计一个方法的参数时,可为部分或全部参数分配默认值.然后,调用这些方法的代码可以选择不指定部分实参,接受其默认值.除此之外,调用方法时,还可通过指定参数名称的方式为其传递实参.以下代码演示了可选参数和命名参数的用法: using System; using System.Collections.Generic; using System.Text; namespace ParameterInMethod { class Program { private static int s_n = 0;

gluster 3.4.5参数及默认值

1 参数及默认值 $gluster-option                                 OPTION: DEFAULT_VALUE            diagnostics.brick-log-level: INFO                network.tcp-window-size: (null)         performance.least-prio-threads: 1                performance.open-behin

编程算法 - 不能被继承的类(模板参数友元) 代码(C++)

不能被继承的类(模板参数友元) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 用C++设计一个不能被继承的类. 可以使用模板类模板参数友元, 模板类私有构造函数, 类虚继承这个模板类, 如果类被其他类继承时, 则虚继承会直接调用模板类, 无法构造. 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #inc

?Swift语言中为外部参数设置默认值,可变参数,常量参数,变量参数,输入输出参数

引用自这里:Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 目录[-] 7.4.4  为外部参数设置默认值 7.4.5  可变参数 7.4.6  常量参数和变量参数 7.4.7  输入-输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1.2语言快速入门v2.0. [示例7-11]以下的代码就为外部参数toString.withJoiner设置了默认的参数"Swift"和&qu

(转)js函数参数设置默认值

原文:http://www.cnblogs.com/RightDear/archive/2013/06/26/3156652.html js函数参数设置默认值 php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){   return $a+$b; } echo simue(); //输出3 echo simue(10); //输出12 echo simue(10,20); //输出30 但js却不能这么定义,如果写function

js 的函数参数的默认值问题

js函数参数设置默认值 php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){ return $a+$b; } echo simue(); //输出3 echo simue(10); //输出12 echo simue(10,20); //输出30 但js却不能这么定义,如果写function simue(a=1,b=2){}会提示缺少对象. js函数中有个储存参数的数组arguments ,所有函数获得的参数会被编译器挨个保存到