模板结构体与重载operator()运算符

 模板的意义是用一套代码解决多个类型的问题,也就是说提出一套公共代码实现同一个功能,在使用不同的参数时,对应的函数功能相同;

重载是改变原有运算符的含义,让其有新的用途。

模板函数和模板结构体的区别是,模板函数只能单独调用;模板结构体/类可以生成对象,然后通过对象来调用,同时里面可以封装更多的重载的或者普通函数,功能相对会更强大一些。

#include <iostream>
using namespace std;

//模板结构体,里面有一个私有变量a和一个重载运算符()的函数,该函数需要传入一个参数,其功能是比较结构体对象的私有变量a的类型和传入的参数类型是否一致。
template <class reqT>
struct IsEqualType
{
    template <class inputT>
    bool operator()(inputT t)
    {
        if (typeid(a) == typeid(inputT))
            return true;
        else
            return false;
    }

    bool isSameType(int t)//普通方法
    {
        if (typeid(b) == typeid(t))
            return true;
        else
            return false;
    }

private:
    reqT a;
    int b;
};

//模板函数,功能是打印传入的参数的类型
template <class T>
void Prt(T t)
{
    cout << typeid(T).name() << endl;
}

int main()
{
    int k = 0;
    char c = 0;
    IsEqualType<char> iet; //构造一个结构体对象,并用char类型来实例化其中的私有变量a

    cout << iet(k) << endl; //调用()运算符,来判断k的类型和iet中的a的类型是否一致。
    cout << iet(c) << endl;
    cout << iet.isSameType(k)<< endl;//调用普通方法。

    Prt(k);
    Prt(c);
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值