实例化

实例化和具体化详解

落花浮王杯 提交于 2020-02-06 05:29:21
primer Plus在解释具体化和实例化看的有点乱,分解出来备忘 在代码中包含函数模板本身并不会生成函数定义,它只是用于生成函数定义的方案 编译器使用模板为我写类型生成函数定义时,得到的是模板实例 如这个模板 template<typename T> void Swap(T &t1,T &t2) { T _t; _t=t1; t1=t2; t2=_t; } 调用 int i = 10,j=20; ::cout<<"i, j ="<<i<<" , "<<j<<endl; cout<<" Using compiler -generated int swapper:\n"; Swap(i,j); ::cout<<"Now i, j ="<<i<<" , "<<j<<endl; 调用 Swap(i,j)导致编译器生成Swap()的一个实例,该实例使用int类型。模板并非函数定义,但使用int的模板实例是函数定义。 这种实例化方式被称为隐式实例化,编译器之所以知道需要进行定义,是由于程序调用Swap()函数时提供了int 参数。 c++还允许 显示实例化 其语法是,声明所需的种类用<>指示类型并在声明前加上template: template void Swap<int>(int &t1,int &t2); 例子 #include<iostream> using namespace std

C++ 模板与泛型编程

跟風遠走 提交于 2020-02-06 05:27:24
《C++ Primer 4th》读书笔记 所谓泛型编程就是以独立于任何特定类型的方式编写代码。泛型编程与面向对象编程一样,都依赖于某种形式的多态性。 面向对象编程中的多态性在运行时应用于存在继承关系的类。我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异。 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型。一个类或一个函数可以用来操纵多种类型的对象。 面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性。 模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。 函数模板 模板定义以关键字 template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。模板形参表不能为空。 template <typename T> int compare(const T &v1, const T &v2) { if (v1 < v2) return -1; if (v2 < v1) return 1; return 0; } 模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。类型形参跟在关键字 class 或 typename 之后定义.在函数模板形参表中,关键字 typename 和 class 具有相同含义,可以互换使用

Spring条件注解@Conditional

Deadly 提交于 2020-02-06 01:00:18
@Conditional是Spring4新提供的注解,它的作用是根据某个条件创建特定的Bean,通过实现Condition接口,并重写matches接口来构造判断条件。总的来说,就是根据特定条件来控制Bean的创建行为,这样我们可以利用这个特性进行一些自动的配置。   本文将分为三大部分,@Conditional源码的介绍、Condition的使用示例和@Conditional的扩展注解的介绍。 一、@Conditional的源码 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Conditional { /** * All {@link Condition Conditions} that must {@linkplain Condition#matches match} * in order for the component to be registered. */ Class<? extends Condition>[] value(); } 从源码中可以看到,@Conditional注解可以用在类和方法上,需要传入一个实现了Condition接口class数组。 二、代码示例

学习使用Spring实例化Bean

烈酒焚心 提交于 2020-02-05 23:44:54
学习使用Spring实例化Bean 1.通过默认构造方法实例化Bean 创建代码 package com.imooc.spring.ioc.class05; public class Bean1 { public Bean1() { System.out.println("Bean1.Bean1"); } } <bean class="com.imooc.spring.ioc.class05.Bean1" name="bean1_1,bean1_2" id ="bean1"></bean> 2.通过静态方法实例化Bean 创建代码 Bean2.java package com.imooc.spring.ioc.class05; public class Bean2 { public Bean2() { System.out.println("Bean2.Bean2"); } } Bean2Factory.java public class Bean2Factory { public static Bean2 getBean2() { return new Bean2(); } } 为了调用此方法: 相当于写出如下公式: Bean2 bean2 = Bean2Factory.getBean2(); 在spring.xml中配置如下: <bean class="com.imooc

Math.round方法、String实例化

末鹿安然 提交于 2020-02-05 21:42:27
math.round(11.5)==12 传入的值是11.5,通过math.round方法进行四舍五入变成12(把一个数字舍入为最接近的整数) string s = new string("xyz"); 创建两个对象 第一个 new的时候 会在堆生成一个对象 第二个 当成参数传入的"xyz"会在常量池生成一个对象 以后用 string x="xyz" 之类的新的变量都会引用常量池的xyz 所以是生成两个对象 来源: https://www.cnblogs.com/miniSimple/p/12266557.html

抽象工厂和工厂设计模式之间有什么区别?

三世轮回 提交于 2020-02-05 21:37:48
我知道有很多关于这两种模式之间差异的帖子,但有一些我找不到的东西。 从我一直在阅读的内容中,我看到工厂方法模式允许您定义如何创建单个具体产品,但是从客户端隐藏实现,因为他们将看到通用产品。 我的第一个问题是抽象工厂。 它的作用是允许您创建具体对象系列(可能取决于您使用的特定工厂)而不仅仅是单个具体对象? 抽象工厂是否只返回一个非常大的对象或许多对象,具体取决于您调用的方法? 我的最后两个问题是关于我在很多地方看到过的单一引言,我无法完全理解: 两者之间的一个区别是,使用抽象工厂模式,类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式使用继承并依赖子类来处理所需的对象实例化。 我的理解是工厂方法模式有一个Creator接口,它将使ConcreteCreator负责知道要实例化的ConcreteProduct。 这是通过使用继承来处理对象实例化的意思吗? 现在关于那个引用,抽象工厂模式究竟是如何通过合成将对象实例化的责任委托给另一个对象? 这是什么意思? 看起来抽象工厂模式也使用继承来完成构建过程,但是我仍然在学习这些模式。 任何帮助,尤其是最后一个问题,将不胜感激。 #1楼 AbstractFactory和Factory设计模式之间的区别如下: Factory Method 仅用于创建一个产品,但 Abstract Factory 用于创建相关或依赖产品的族。

Bean以及bean的实例化

故事扮演 提交于 2020-02-05 02:14:14
什么是bean bean就是IoC容器托管的对象。 引用自官方文档 In addition to bean definitions that contain information on how to create a specific bean, the ApplicationContext implementations also permit the registration of existing objects that are created outside the container (by users). This is done by accessing the ApplicationContext’s BeanFactory through the getBeanFactory() method, which returns the BeanFactory DefaultListableBeanFactory implementation. DefaultListableBeanFactory supports this registration through the registerSingleton(..) and registerBeanDefinition(..) methods. However, typical applications work

C++ 模板

眉间皱痕 提交于 2020-02-03 19:56:13
泛型程序设计与模板: 一种算法在实现时不指定具体要操作的数据的类型的程序设计方法。所谓"泛型"是指算法只要实现 一遍,就能适用于多种数据类型。泛型程序设计方法的好处在于能够减少重复代码的编写。 在C++中模板分为函数模板和类模板两种。 函数模板: 作用:面向对象的继承和多态机制有效的提高了程序的可重用性和可扩充性,但在可重用性的 某些方面,程序员还希望得到更多的支持,以减少重复代码的编写。 // 例如:Swap函数 void Swap(int &a, int &b){ int c = a; a = b; b = c; } void Swap(double &a, double &b){ double c = a; a = b; b = c; } template <typename T> void Swap(T &a, T &b){ T c = a; a = b; b = c; } 在编写Swap函数时,在面对不同的数据类型,我们需要编写不同的重载函数,但这些函数初处了所处理的 数据类型的不同,形式上是一模一样的,为了减少这些重复代码的编写,继承和多态明显无法解决这些问 题。因此,"模板"的概念就应运而生。 函数模板的写法: template <typename 类型参数1,类型参数2,...> 返回值类型 模板名(形参表){ 函数体; }

keras_实例化一个小型的卷积神经网络

会有一股神秘感。 提交于 2020-02-03 03:17:46
keras_深度学习用于计算机视觉 参考: https://blog.csdn.net/xiewenrui1996/article/details/104009618 import keras keras . __version__ from keras import layers from keras import models model = models . Sequential ( ) model . add ( layers . Conv2D ( 32 , ( 3 , 3 ) , activation = 'relu' , input_shape = ( 28 , 28 , 1 ) ) ) model . add ( layers . MaxPooling2D ( ( 2 , 2 ) ) ) model . add ( layers . Conv2D ( 64 , ( 3 , 3 ) , activation = 'relu' ) ) model . add ( layers . MaxPooling2D ( ( 2 , 2 ) ) ) model . add ( layers . Conv2D ( 64 , ( 3 , 3 ) , activation = 'relu' ) ) # 重要的是,卷积神经网络接收形状为 (image_height, image_width,

Android LayoutInflater&LayoutInflaterCompat源码解析

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-02 00:12:02
本文分析版本: Android API 23,v4基于 23.2.1 1 简介 实例化布局的XML文件成相应的View对象。它不能被直接使用,应该使用 getLayoutInflater() 或 getSystemService(Class) 来获取已关联了当前 Context 并为你正在运行的设备正确配置的标准LayoutInflater实例对象。 例如: LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 为了创建一个对于你自己的View来说,附加了 LayoutInflater.Factory 的 LayoutInflater ,你需要使用 cloneInContext(Context) 来克隆一个已经存在 LayoutInflater ,然后调用 setFactory(LayoutInflater.Factory) 来替换成你自己的Factory。 由于性能原因,View的实例化很大程度上依赖对于xml文件在编译时候的预处理。因此,目前使用 LayoutInflater 不能使用直接通过原始xml文件获取的 XmlPullParser ,只能使用一个已编译的xml资源返回的 XmlPullParser ((R