• 限定类的<<操作符(函数模板)输入的为整数类型


    http://topic.csdn.net/u/20081017/22/43aaada5-eb9f-4614-bba8-c185d0dfa410.html
    需要实现如下功能:
    class A
    {
    public:
        template <typename T>
        A & operator < <(T rhs)
        {
          //some integral operation
        }
    };

    int main(void)
    {
        A a;
        a < < 123;    //Ok
        a < < 123.0/*或其他非整数类型*/;  //编译失败,且错误信息指向本行
    }
    附加一个:
    5. 使用BOOST_STATIC_ASSERT, 如下:
    class A
    {
    public:
        template <typename T>
        A & operator < <(T rhs)
        {
            BOOST_STATIC_ASSERT((boost::is_integral <T>::value));
          //some integral operation
        }
    };

    int main(void)
    {
        A a;
        a < < 123;    //Ok
        a < < 123.0/*或其他非整数类型*/;  //编译失败,但是错误信息指向BOOST_STATIC_ASSERT一行
    }

    如果没有好办法,只有用这种了
    模板元编程的知识不是靠到boost目录里找的。
    是要看过《Modern C++ design》和《C++模板元编程》2本书掌握出来的。
    class A
    {
    public:
        template <typename T>
        typename boost::enable_if <boost::is_integral <T>, A/*T*/>::type & operator < <(T rhs)
        {
        }
    };
  • 相关阅读:
    Boost线程库学习笔记
    sizeof运算符
    用法char ch=getchar()正确性详解
    C语言中的缓冲输出
    算术运算的溢出行为 and 一个数内存中表示1的个数
    ARP、RARP、ICMP、ping
    http和https协议
    关于宋词频率统计(R语言)
    Backbone.js API中文文档
    腾讯小Q书桌图标怎么实现的啊?
  • 原文地址:https://www.cnblogs.com/cutepig/p/1400151.html
Copyright © 2020-2023  润新知