zoukankan      html  css  js  c++  java
  • CPP Templates 之 模板的显式特化技巧

    模板的显式特化的注意事项:

    一、
    指定的模板实参列表必须喝相应的模板参数列表一一对应。例如,我们不能用一个
    非类型值来替换一个模板参数。然而,如果模板参数具有缺省模板实参,那么用来替换的

    模板实参就是可选的:

    template <typename T>
    class Types{
    public:
        typedef int I;
    };

    template <typename T,typename U=typename Types<T>::I>
    class S;

    template<>
    class S<void>//ok
    {
    public:
        void f();
    };

    template<>
    class S<char,char>;//ok

    template<>

    template<> class S<char,0>;//error.不能用0来代替U

    二、全局成员特化

    #include <iostream>

    using namespace std;

    template<typename T>
    class Outer{/1
    public:
        template<typename U>
        class Inner
        {
        private:
            static int count;
        };
        static int code;//4
        void print()const//5
        {
            std::cout<<"generic"<<endl;
        }
    }
    /*在4处的code和5处print(),这两个普通成员都具有一个外围类模板,因此需要用一个
     *template<>前缀说明:后面将用一个模板实参集来对他进行全局特化
     */
    template<>
    int Outer<void>::code=12;

    template<>
    void Outer<void>::print() const
    {
        std::cout<<"Outer<void>"<<endl;
    }
    /*1.上面的这些定义会用于代替类Outer<void>在4和5处的泛型定义;但是类Outer<void>的
     *其他成员仍然默认地产生于1处的模板。
     *2.在提供了上述声明后,就不能再次提供Outer<void>的显示特化
     */
  • 相关阅读:
    深入Vue.js从源码开始(二)
    Vue.js的动态组件模板
    Vue中的methods、watch、computed
    Understand .sync in Vue
    vue程序中组件间的传值方式
    xUtils框架的介绍(一)
    xUtils框架的介绍(二)
    Java如何计算hashcode值
    Java网络编程总结
    深入Java线程管理(五):线程池
  • 原文地址:https://www.cnblogs.com/bayonetxxx/p/1603482.html
Copyright © 2011-2022 走看看