美文网首页
C++友元运算符重载函数的泛型模板写法

C++友元运算符重载函数的泛型模板写法

作者: youxiaochen | 来源:发表于2019-03-19 16:25 被阅读0次

相信很多人都碰到友元运算符重载函数的泛型模板编译不通过的情况

template <typename T> 
class Demo 
{   
    //友元运算符重载函数的泛型模板写法
    friend Demo operator>> <T> (const Demo &obj, T t);
public:
    Demo(T t) {
        this->t = t;
    }
private:
    T t;
public:
    T getT() {
        return this->t;
    }
};

//对应友元运算符重载函数的泛型模板写法
template <typename T>
Demo<T> operator>>(const Demo<T> &obj, T t) {
    Demo<T> temp(obj.t + t);
    return temp;
}

int main() {
    Demo<int> d(4);
    Demo<int> d2 = d >> 1;
    cout << d2.getT() << endl;
    return 0;
}

因为编译器并不是把函数模板处理成能够处理任意类的函数;编译器从函数模板通过具体类型产生不同的函数;编译器会对函数模板进行两次编译:在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。

//友元运算符重载函数的泛型模板写法
friend Demo operator>> <T> (const Demo &obj, T t);

//对应友元运算符重载函数的泛型模板写法
template <typename T>
Demo<T> operator>>(const Demo<T> &obj, T t) {
    Demo<T> temp(obj.t + t);
    return temp;
}

相关文章

  • Geekband C++ 第五周

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

  • 15.C++泛型

    模板函数 模板类 函数模板和友元函数 注意,只在重载左移右移运算符的时候使用友元函数,其他都不要用,友元函数容易导...

  • C++友元运算符重载函数的泛型模板写法

    相信很多人都碰到友元运算符重载函数的泛型模板编译不通过的情况 因为编译器并不是把函数模板处理成能够处理任意类的函数...

  • C++ 部分运算符重载

    可重载的运算符 不可重载的运算符和符号 重载运算符为类的成员函数 重载运算符为友元函数 重载赋值运算符 重载流插入...

  • 1.2.17_C++ ++ 和 -- 运算符重载

    C++ 重载运算符和重载函数 递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符...

  • 日记之旅第七天

    上午:重点讲解了函数重载,其中包括运算符重载,函数成员重载。运算符重载结合了昨天所讲的友元函数一起使用 下午:复习...

  • 极客班STL与泛型编程(第一周笔记)

    C++模板 什么是泛型编程和模板? 泛型是一种编程思想,而模板是泛型编程在C++上的实现方法 以往的函数都会是有固...

  • C++运算符重载

    C++运算符重载的实质:运算符重载的实质就是函数重载或函数多态。运算符重载是一种形式的C++多态。目的在于让人能够...

  • 1.2.15_C++ 关系运算符重载

    C++ 重载运算符和重载函数 C++ 语言支持各种关系运算符( < 、 > 、 <= 、 >= 、 == 等等),...

  • 1.2.14_C++ 二元运算符重载

    C++ 重载运算符和重载函数 二元运算符需要两个参数,下面是二元运算符的实例。 我们平常使用的加运算符( + )、...

网友评论

      本文标题:C++友元运算符重载函数的泛型模板写法

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