我们正在努力恢复Google Play商店上的Unionpedia应用程序
传出传入
🌟我们简化了设计以优化导航!
Instagram Facebook X LinkedIn

模板 (C++)

指数 模板 (C++)

模板(Template)指C++程序设计语言中的函数模板与类模板,是一种参数化类型机制,大体对应于java和C#中的泛型,但也有一些功能上的显著差异(C++模板支持后两者没有明确对应的模板模板参数和模板非类型参数,但不支持Java的通配符以及C#的泛型类型约束)。模板是C++的泛型编程中不可缺少的一部分。 模板是C++程序员绝佳的武器,特別是結合了多重继承与运算符重载之后。C++的标准函数库提供的许多有用的函数大多結合了模板的概念,如STL以及iostream。.

目录

  1. 33 关系: Auto (C++)可变参数模板名字修饰奇异递归模板模式子类型不完全类型代码膨胀分配器 (C++)優先佇列Boost C++ LibrariesC++C♯Common Lisp程式迴圈用户定义字面量特设多态Decltype鸭子类型软件工程Google TalkJava和C++的對照String (C++标准库)Vector (STL)Windows Template Library标准模板库概念 (C++)模板模板参数推导模板的模板参数模板方法泛型智能指针.NET Framework泛型

Auto (C++)

auto是C++程序设计语言的关键字。自C++11以来,auto关键字用于两种情况:声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。C++98标准中auto关键字用于自动变量的声明,但由于使用极少且多余,在C++11中已删除这一用法。.

查看 模板 (C++)和Auto (C++)

可变参数模板

可变参数模板是模板编程时,模板参数(template parameter)的个数可变的情形。 已经支持可变参数模板的编程语言有D语言与C++(自C++11标准)。.

查看 模板 (C++)和可变参数模板

名字修饰

名字修饰,又译作名字粉碎、名字重整,译自英文name mangling或name decoration,是现代计算机程序设计语言的编译器用于解决由于程序实体的名字必须唯一而导致的问题的一种技术。 它提供了在函数、结构体、类或其它的数据类型的名字中编码附加信息一种方法,用于从编译器中向链接器传递更多语义信息。 该需求产生于程序设计语言允许不同的条目使用相同的标识符,包括它们占据不同的命名空间(典型的命名空间是由一个模块、一个类或显式的namespace指示来定义的)或者有不同的签名(例如函数重载)。 任何由编译器产生的目标代码通常与另一部分的目标代码(产生于同一款或不同款的编译器)通过链接器把它们链接起来。链接器需要一大堆每个程序实体信息。例如正确链接一个函数需要它的名字、参数个数和它们的类型,等等。.

查看 模板 (C++)和名字修饰

奇异递归模板模式

奇异递归模板模式(curiously recurring template pattern,CRTP)是C++模板编程时的一种惯用法(idiom):把派生类作为基类的模板参数。更一般地被称作F-bound polymorphism,是一类。.

查看 模板 (C++)和奇异递归模板模式

子类型

在编程语言理论中,子类型(动名词,subtyping)是一种类型多态的形式。这种形式下,子类型(名词,subtype)可以替换另一种相关的数据类型(超类型,supertype)。也就是说,针对超类型元素进行操作的子程序、函数等程序元素,也可以操作相应的子类型。如果 S 是 T 的子类型,这种子类型关系通常写作 S number 的语言。在第一种情况下,整数类型将是浮点数类型的子类型;在第二种情况下,这两个类型都是 number 的子类型而相互之间无子类型关系。 编程者可利用子类型来以比没有它更抽象的方式来写代码。考虑下面的例子: 如果整数和实数都是 number 的子类型,则二者任何类型都可以传递给这个函数。为此,子类型经常被认为是一种形式的多态性。上述例子也可以比较于 C++ 语言的模板。 在类型论中,子类型关系经常写为 <:,有着 A<:B 意味着 A 是 B 的子类型。在类型论中子类型可用如下事实来特征化,如果 A<:B,类型 A 的任何表达式也可被给予类型 B;立法这个特征化的形式类型规则叫做“包容”规则。.

查看 模板 (C++)和子类型

不完全类型

在计算中,一个不完全类型是一种特殊的数据类型,它的定义会跨越多个源文件。在面向对象编程中会由于一些不同的原因用到:性能和成本常常会阻止使用几个分离的类;代码生成工具的使用越来越多,而将机器生成的代码和程序员写的代码分离开来,则会十分方便。.

查看 模板 (C++)和不完全类型

代码膨胀

代码膨胀(Code bloat)是指通过代码生成的输出文件过大、速度缓慢或者有其他浪费资源的情况。代码膨胀可能由编写代码的语言、编译时所用的編譯器,或者编写的程序员导致。因此,虽然代码膨胀通常指源代码存在不必要的部分(由程序员导致),但也可指生成的代码或者二进制文件文件有膨胀问题。.

查看 模板 (C++)和代码膨胀

分配器 (C++)

在C++编程中,分配器(allocator)是C++标准库的重要组成部分。C++的库中定义了多种被统称为“容器”的数据结构(如链表、集合等),这些容器的共同特征之一,就是其大小可以在程序的运行时改变;为了实现这一点,进行动态内存分配就显得尤为必要,在此分配器就用于处理容器对内存的分配与释放请求。换句话说,分配器用于封装標準模板庫(STL)容器在内存管理上的低层细节。默认情况下,C++标准库使用其自带的通用分配器,但根据具体需要,程序员也可自行定制分配器以替代之。 分配器最早由作为C++标准模板库(Standard Template Library,简称STL)的一部分发明,其初衷是创造一种能“使库更加灵活,并能独立于底层数据模型的方法”,并允许程序员在库中利用自定义的指针和;但在将标准模板库纳入C++标准时,C++标准委员会意识到对数据模型的完全抽象化处理会带来不可接受的性能损耗,为作折中,标准中对分配器的限制变得更加严格,而有鉴于此,与斯特潘诺夫原先的设想相比,现有标准所描述的分配器可定制程度已大大受限。 虽然分配器的定制有所限制,但在许多情况下,仍需要用到自定义的分配器,而这一般是为封装对不同类型内存空间(如共享内存与已回收内存)的访问方式,或在使用内存池进行内存分配时提高性能而为。除此以外,从内存占用和运行时间的角度看,在频繁进行少量内存分配的程序中,若引入为之专门定制的分配器,也会获益良多。.

查看 模板 (C++)和分配器 (C++)

優先佇列

优先队列是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列往往用堆来实现。.

查看 模板 (C++)和優先佇列

Boost C++ Libraries

Boost C++ 函式庫(Libraries)是一組擴充C++功能的經過同行評審(Peer-reviewed)且開放源碼程式庫。大多數的函式為了能夠以開放源碼、封閉專案的方式運作,而授權於Boost軟體授權條款(Boost Software License)之下。許多Boost的開發人員是來自C++標準委員會,而部份的Boost函式庫成為C++的TR1標準之一。 為了要確保函式庫的效率與彈性,Boost廣泛的使用模板(template)功能。而它是針對各式領域的C++使用者與應用領域(Application Domain)上,包含的函式庫類別從像這種類通用函式庫,到像是檔案系統的作業系統抽象層,甚至能夠利用Boost來開發額外的函式庫或是給進階的C++使用者利用,像是。.

查看 模板 (C++)和Boost C++ Libraries

C++

C++是一種使用廣泛的计算机程序設計語言。它是一種通用程序設計語言,支援多重编程模式,例如程序化程序設計、数据抽象、面向对象程序設計、泛型程序設計和设计模式等。 比雅尼·斯特勞斯特魯普博士在贝尔实验室工作期间在20世紀80年代發明並實現了C++。起初,這種語言被稱作“C with Classes”(“包含‘類’的C語言”),作為C語言的增強版出現。随后,C++不斷增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多繼承(multiple inheritance)、标准模板库(standard template library, STL)、异常处理(exception)、运行时类型信息(Runtime type information)、命名空間(namespace)等概念逐漸納入標準。1998年,國際標準組織(ISO)頒布了C++程序設計語言的第一個國際標準ISO/IEC 14882:1998,目前最新标准为ISO/IEC 14882:2017。根據《C++編--程思想》(Thinking in C++)一書,C++與C的代码执行效率往往相差在±5%之間。 C++語言發展大概可以分為三個階段:第一階段從80年代到1995年。這一階段C++語言基本上是傳統類型上的面向对象語言,並且憑藉着接近C語言的效率,在工業界使用的開發語言中佔據了相當大份額;第二階段從1995年到2000年,這一階段由於標準模板庫(STL)和後來的Boost等程式庫的出現,泛型程序設計在C++中佔據了越來越多的比重。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的衝擊;第三階段從2000年至今,由於以Loki、MPL(Boost)等程式庫為代表的產生式編程和模板元編程的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程序設計語言中最複雜的一員。.

查看 模板 (C++)和C++

C♯

C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#以.NET框架类库作为基础,拥有类似Visual Basic的快速开发能力。C#由安德斯·海尔斯伯格主持开发,微软在2000年发布了这种语言,希望借助这种语言来取代Java。C#已经成为Ecma国际和国际标准组织的标准规范。.

查看 模板 (C++)和C♯

Common Lisp

Common Lisp,縮寫為CL(不是組合邏輯的縮寫)是Lisp編程語言的一種方言,由ANSI INCITS 226-1994(R2004)(前身為ANSI X3.226-1994(R1999)),所定義的語言規範標準。Common Lisp HyperSpec是源自於ANSI Common Lisp標準的網頁超連結版本。 CL語言是為標準化和改良Maclisp而開發的後繼者。到20世紀80年代初,幾個工作群組已經在設計MacLisp各種後繼者,例如:Lisp Machine Lisp(又名 ZetaLisp),Spice Lisp,NIL和S-1 Lisp。CL是為了標準化和擴展此前眾多的MacLisp分支而開發,它本身並非具體的實作,而是對語言設立標準的規範。有數個實作符合Common Lisp規範,其中包括自由和開源軟件,以及商業化產品。CL支援了結構化、函數式和物件導向編程等範式。相对于各种嵌入在特定产品中的语言,如Emacs Lisp和AutoLISP,Common Lisp是一種用途廣泛的编程语言。不同於很多早期Lisp,Common Lisp如同Scheme,其中的變量是預設為詞法作用域的。 身為一種動態編程語言,它有助於進化和增量的軟件開發,並將其迭代編譯成高效的執行程序。這種增量開發通常是互動持續地改善,而不需中斷執行中的應用程序。它還支援在後期的分析和優化階段添加可選的型別註記與轉型,使編譯器產生更有效率的代碼。例如在硬體和實作的支援範圍內,fixnum能保存一個未封裝整數,允許比大整數或任意精度類型更高效率的運算。同樣地,在每個模組或函數的基礎上可聲明優化,指示編譯器要編譯成哪一類型的安全級別。 CL包含了支援多分派和方法組合的物件系統,縮寫為CLOS,它通常以元物件(Metaobject)協定來實現。 CL藉由標準功能進行擴展,例如Lisp宏(编译时期程序自身完成的代码重排(compile-time code rearrangement accomplished by the program itself))和阅读器宏(赋予用户自定义的語法以扩展具特殊意义的符号(extension of syntax to give special meaning to characters reserved for users for this purpose))。 CL為Maclisp和约翰·麦卡锡的原創Lisp提供了一些向後兼容性。這允許較舊的Lisp軟件移植到Common Lisp之上。.

查看 模板 (C++)和Common Lisp

程式迴圈

迴圈是計算機科學運算領域的用語,也是一種常見的控制流程。迴圈是一段在程式中只出現一次,但可能會連續執行多次的程式碼。迴圈中的程式碼會執行特定的次數,或者是執行到特定條件成立時結束迴圈,或者是針對某一集合中的所有項目都執行一次。 在一些函數程式語言(例如Haskell和Scheme)中會使用递归或不动点组合子來達到迴圈的效果,其中尾部递归是一種特別的递归,很容易轉換為迭代。.

查看 模板 (C++)和程式迴圈

用户定义字面量

户定义字面量(user-defined literal)是C++程序设计语言从C++11标准开始支持的用户定义类型的字面量。.

查看 模板 (C++)和用户定义字面量

特设多态

特定多态(ad hoc polymorphism)是程序设计语言的一种多态,多态函数有多个不同的实现,依赖于其实参而调用相应版本的函数。因此,特设多态仅支持有限数量的不同类型。函数重载乃至运算符重载也是特设多态的一种。 特定多态的名字来源于其发明人克里斯托弗·斯特雷奇于1967年8月在哥本哈根的计算机程序设计暑期学校发表了著名论文中首次提出了参数多态、特设多态、左值、右值等概念。。特设多态与参数多态相对。ad hoc在这里并不是贬义,而是指这类多态并不是类型系统的基本特性,不是像参数多态那样适用于无穷多的类型,而是针对特定问题的解决方案。 换言之,参数多态对各模板参数的实现,是根据模板的通用(generically)的行为的抽象,即泛型的语义;而特设多态可以针对不同的版本实现完全不同的行为,或曰对于每个不同的模版参数都有单独的版本来应对。打个比方:假如我们要把原材料切成两半——.

查看 模板 (C++)和特设多态

Decltype

在C++程序设计语言中,decltype作为,用于获取表达式的数据类型。C++11标准引入decltype,主要是为泛型编程而设计,以解决泛型编程中有些类型由模板参数决定而难以(甚至不可能)表示的问题。 从语义上说,decltype的设计适合于通用库编写者或编程新手。总体上说,对于变量或函数参数作为表达式,由decltype推导出的类型与源码中的定义可精确匹配。而正如操作符一样,decltype不对操作数求值。.

查看 模板 (C++)和Decltype

鸭子类型

在程序设计中,鸭子类型(duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试(见下面的“历史”章节),“鸭子测试”可以这样表述: 在鸭子类型中,关注点在于对象的行为,能作什么;而不是关注对象所属的类型。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的"走"和"叫"方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的"走"和"叫"方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。 鸭子类型通常得益于"不"测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。.

查看 模板 (C++)和鸭子类型

软件工程

软件工程(quote) 1968年秋季,NATO(北約)的科技委員會召集了近50名一流的編程人員、計算機科學家和工業界巨頭,討論和制定擺脫“軟體危機”的對策。在那次會議上第一次提出了軟體工程(software engineering)這個概念,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。其后的几十年里,各种有关软件工程的技术、思想、方法和概念不断被提出,软件工程逐步发展为一门独立的科学。 1993年,电气电子工程师学会(IEEE)给出了一个更加综合的定义:"将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中"。此后,IEEE多次给出软件工程的定义。 在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,提高人们的工作效率,同时提升了生活质量。 软件工程师是对应用软件创造软件的人们的统称,软件工程师按照所处的领域不同可以分为系统分析师、系统架构师、软件设计师、程序员、测试工程师、界面与交互设计师等等。各种软件工程师人们俗称程序员。.

查看 模板 (C++)和软件工程

Google Talk

--是Google公司于2005年8月24日推出的一款IP电话及即时通讯的服務。与其他即时通讯服務不同的是,--在使用开放的XMPP协议(原名Jabber),使用--服务不一定要通过官方客戶端。VoIP使用XMPP扩展的Jingle协议。 --用户端仅支援Windows(2000、XP、Server 2003、7)和Google Chrome OS;在Android上被系统原生支持;对于其它的移动电话,支持BlackBerry、iPhone。XMPP协议的客户端软件列表列举了很多非Google提供的兼容软件。 --在其开发者页面 以开放的通讯为大标题,深入客户端、服务、平台三方面的选择。 2016年6月26日,Google Talk正式关闭,并被Google Hangouts取代。.

查看 模板 (C++)和Google Talk

Java和C++的對照

这是一个Java语言和C++语言之间的比较。.

查看 模板 (C++)和Java和C++的對照

String (C++标准库)

是C++標準程式庫中的一個头文件,定义了C++标准中的字符串的基本模板类std::basic_string及相关的模板类实例: 其中的string是以char作为模板参数的模板类实例,把字符串的内存管理责任由string负责而不是由编程者负责,大大减轻了C语言风格的字符串的麻烦。 std::basic_string提供了大量的字符串操作函数,如比较、连接、搜索、替换、获得子串等。并可与C语言风格字符串双向转换。std::basic_string属于C++ STL容器类,用户自定义的类也可以作为它的模板参数,因此也适用C++ STL Algorithm库。 string本质上是以字符作为元素的vector特化版本;不存在0字符结尾这个概念,能装入'\0'这种数据。.

查看 模板 (C++)和String (C++标准库)

Vector (STL)

Vector 是C++標準程式庫中的一個類,可視為會自動擴展容量的陣列,以循序(Sequential)的方式維護變數集合。vector的特色有支持隨機存取,在集合尾端增刪元素很快,但是在集合中間增刪元素比較費時。vector是C++標準程式庫中的眾多容器(container)之一。 vector以模板(泛型)方式實現,可以保存任意類型的變數,包括使用者自定義的資料型態,例如:它可以是放置整數(int)型態的 vector、也可以是放置字串(string)型態的 vector、或者放置使用者自定類別(user-defined class)的 vector。.

查看 模板 (C++)和Vector (STL)

Windows Template Library

Windows Template Library(WTL)是一個用於Win32研發的物件導向的C++模板函式庫。WTL由Microsoft的員工Nenad Stefanovic創造,起初作為內部使用,之後發行為Visual Studio和Win32 Framework SDK的不支援增益集。它主要被開發作為Microsoft Foundation Classes的輕量化替代品,以微軟ATL函式庫(另一個被應用在創造COM與ActiveX的輕量函式庫)為基礎。.

查看 模板 (C++)和Windows Template Library

标准模板库

标准模板库(英文:Standard Template Library,缩写:STL),是一个C++软件库,大量影響了C++标准程序库但並非是其的一部分。其中包含4个组件,分别为算法、容器、函数、迭代器。 模板是C++程序设计语言中的一个重要特征,而标准模板库正是基于此特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性。.

查看 模板 (C++)和标准模板库

概念 (C++)

在針對 C++ 進行修訂的 C++0x 中,概念 (concept) 和與其相關的一組公設 (axiom) 被提出作為 C++ 模板系統的擴充。它們被設計用來增進編譯器發現問題代碼所產生的錯誤訊息,並讓程序員能在他們所編寫的樣板中定義樣板參數所具備的屬性。這些屬性讓代碼能指引編譯器做某些優化(除了增進可讀性之外),同時也可能透過形式验证工具來檢驗實作與規格是否相符以增進可靠性。 2009年7月,因為概念被認為還未準備好進入 C++0x,C++0x 委員會決定從標準草案中將其移除。目前有些非正式的計劃以某種形式將概念再次納入標準,但仍未有正式的決定。一個針對概念的初步實作是。.

查看 模板 (C++)和概念 (C++)

模板

--(,又譯作「範本」)通常指具有固定内容、可构建多个不同实例的可重用样板,也可以指:.

查看 模板 (C++)和模板

模板参数推导

模板参数推导(template argument deduction),是在调用C++的模板函数时,由编译器根据使用上下文来推断所调用的模板函数的模板参数。这一概念也适用于类的模板成员函数。 类模板也存在模板参数推导的情形。例如:.

查看 模板 (C++)和模板参数推导

模板的模板参数

模板的模板参数(template template parameter)是指C++语言程序设计中,一个模板的参数是模板类型。只有类模板允许其模板参数是模板类型;函数模板不允许具有这样的模板参数。 模板的模板参数可以有默认值。例如: 模板的模板参数,其实参应当是类模板名字或者别名模板(alias template)。当模板的模板参数做“形参实参结合”时,仅考虑把实参的基本(即未特化)类模板与模板的模板形参做匹配;不考虑实参的偏特化类模板,即使偏特化后的参数列表与模板的模板形参匹配得上。 例如: 当模板的模板参数被实例化时,考虑采用该模板参数的偏特化版本。如果在实例化之处该偏特化版本仍不可见,且如果它是可见的则应该当采用,这时该程序为病态。 例如: 当一个模板的模板形参(称作P)与一个作为实参的模板(称作A)匹配时, 要求P与A各自的模板形参列表的对应成员满足:.

查看 模板 (C++)和模板的模板参数

模板方法

模板方法模式定義了一個演算法的步驟,並允許子類別為一個或多個步驟提供其實踐方式。讓子類別在不改變演算法架構的情況下,重新定義演算法中的某些步驟。在軟件工程中,它是一種軟件設計模式,和C++模板没有關連。.

查看 模板 (C++)和模板方法

泛型

泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Visual Basic.NET 称之为泛型(generics);ML、Scala 和 Haskell 称之为参数多态(parametric polymorphism);C++ 和 D称之为模板。具有广泛影响的1994年版的《Design Patterns》一书称之为参数化类型(parameterized type)。.

查看 模板 (C++)和泛型

智能指针

智能指针(Smart pointer)是一種抽象的資料類型。在程式設計中,它通常是經由类模板來實作,藉由模板來達成泛型,藉由類別的解構函數來達成自動釋放指標所指向的記憶體或物件。.

查看 模板 (C++)和智能指针

.NET Framework泛型

.NET Framework泛型是在.NET Framework 2.0的公共语言运行库(CLR)中的增加的一项新功能,类似于C++的模板,但不如C++的模板灵活,不过也有一些自己的特性。 泛型为.NET Framework引入了类型参数的概念,这样便可以设计出这样的类和方法:它们把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候执行。比如,通过泛型类型参数T,程序员就可以编写其他客户端代码能够使用的单个类,而不用担心强制转换或装箱操作而带来的额外的运行成本或风险。.

查看 模板 (C++)和.NET Framework泛型

亦称为 函数模板,类模板。