1. 程式人生 > >C++——函式模板和函式指標

C++——函式模板和函式指標

#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;

//定義函式模板
template <typename elemType>
void display_message(const string &msg, const vector<elemType> &vec);

template <typename elemType>
void display_message(const string &msg, const list<elemType> <);
//函式指標使用
//函式指標,格式比較複雜,必須指明其所指函式的返回型別及引數列表。
//本例的引數列表內容是:int,返回型別是 const vector<int>* 
//此外,函式指標的定義必須將*放在某個位置,表示這份定義表示的是一個指標,然後加一個名稱。
//注意,第三個引數初值給的是0,這是有目的的。
bool test(int pos, int &ele, const vector<int>* (*seq)(int) = 0 )
{	
	//....
	//賦予函式指標初值,如果初值為0,表示並未指向任何函式
	if ( !seq )
	{
		printf("seq is null !!!");
	}
	//由函式指標指向的函式,其呼叫方式和一般函式相同
	const vector<int> *p = seq(pos);
	return true;
}

相關推薦

C++——函式模板函式指標

#include <stdio.h> #include <iostream> #include <vector> using namespace std; //定

C++ 函式過載,函式模板函式模板過載,選擇哪一個?

過載解析   在C++中,對於函式過載、函式模板和函式模板過載,C++需要有一個良好的策略,去選擇呼叫哪一個函式定義(尤其是多個引數時),這個過程稱為過載解析。   (這個過程將會非常複雜,但願不要遇到一定要寫這種程式碼的時候。)   大致步驟   Ⅰ.建立候選函式列表(其中包含與候選函式相同名稱的

C++ 函式模板模板--泛型程式設計

所謂函式模板,實際上是建立一個通用函式,其函式型別和形參型別不具體指定,用一個虛擬的型別來代表。這個通用函式就稱為函式模板。 凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。 一 函式模板初識 1) 為什麼要有函式模板? 函式業務邏輯一樣,但

過載函式函式模板函式指標的聯絡使用

過載函式 過載函式指擁有相同的函式名稱,但引數列表不相同(可能是引數型別不相同,可能是引數個數不相同).編譯器在編譯是通過將呼叫者提供的實際引數和每一個過載函式的引數對比,找出其中最合適的函式進行執行。 下面我們實現一個過載函式max(),讓它接受一下引數

函式模板模板C++)

所謂函式模板,實際上是建立一個通用函式,其函式型別和形參型別不具體指定,用一個虛擬的型別來代表。這個通用函式就稱為函式模板。 函式模板和普通函式的區別: 函式模板不允許自動型別轉化,普通函式能夠進行自動型別轉換 函式模板和普通函式在一起呼叫的規則: 1 函式模板

北京大學MOOC C++學習筆記(七)函式模板模板

函式模板: 交換兩個整型變數的值的Swap函式: void Swap(int & x,int & y) {     int tmp = x;     x = y;     y = tmp; } 交換兩個double型變數的值的Swap函式: void Swa

C++函式過載函式模板

函式預設引數 預設引數指的是當函式呼叫中省略了實參時自動使用的一個值。例如,將void wow (int n) 設定成n有預設值1,則當函式呼叫wow() 相當於呼叫wow(1)。這極大的提高了使用函式的靈活性。 對於帶引數列表的函式,必須從左向右新增預設值,也就是說,要

關於C#中Lambda'函式指標'的簡單認識

char (*Body)(char a,char a); delegate char vest (char a, char b); C#雖然對deleagte關鍵字做了大量的操作但是本質是改不了的(本人是這麼理解的),它就是個記錄函式地址的工具C#為了更方便語言的

C++學習筆記】函式匹配函式指標

一、函式匹配   在大多數情況下,比較容易確定某次呼叫應選用哪個過載函式,然而當幾個過載函式的形引數量相等以及某些形參的型別可以由其他型別轉換得到時,這個相對就不那麼容易。 1.1 實參型別轉換   確定最佳匹配,編譯器將實參型別到形參型別的轉換分成以下

C++類模板函式模板 & 類模板繼承

函式模板與類模板其實就是Java裡面的泛型程式設計,只作為抽象的模板,使用時需要指定具體的型別才能例項 下面就看類模板最典型的案列就能明白了: #include <iostream> #include <initializer_list> #inc

【續集】 C語言圖形函式影象的繪製【其他部分 第二章】

           第二章【續集】 圖形和函式影象的繪製       圓形和拋物線的繪製 繪製函式影象的第二種方法 同一座標系下繪製多個函式影象(交叉影象) 4、圓形和拋物線的繪製    有了

淺談static、類模板函式模板

首先,我們先來看static,從C語言我們知道,他是一個靜態變數的識別符號,可以讓一個變數在離開作用域後,還能夠存活。那麼如果我們在類當中定義了一個static資料會怎麼樣,這個static資料會在程式開始前就會存在,而且僅此一份。那麼static function呢,簡而

Qt C++與QML混合程式設計(1)- QML中使用C++的類函式

本章主要介紹一下在QML中使用C++的類的兩種方法 1.設定QML的上下文屬性 為QML的節點設定上線屬性,在QML檔案中可以之間使用這個屬性的函式。 QQuickView view; view.rootContext()->setCo

C語言的函式定義函式宣告

C語言不同於Java語言,在Java語言中,在一個類中,定義函式/方法後,在呼叫時不需要宣告。在C語言中定義函式後,在使用前,需要在main函式前進行宣告,否則會報錯。 #include<stdio.h> //使用函式前,需要在main函式前對使用的函式進行宣

函式模板模板函式

1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立一個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。 函式模板的宣告形式為: template<typename 資料

混合編譯:c++檔案呼叫c檔案變數函式c檔案呼叫c++檔案變數函式

1.c++檔案呼叫c檔案變數和函式 前言:以前見到extern "C"這樣的語句,只是簡單地知道跟外部連結有關,但是沒有深刻理解它的意思。 首先,為什麼要使用extern "C"修飾符? C++呼叫其它語言的函式,由於編譯器生成函式的機制不一樣,所以需要經過特殊處理,才可以

C++ 控制結構函式(三)—— 函式II(Functions II)

引數按數值傳遞和按地址傳遞(Arguments passed by value and by reference) 到目前為止,我們看到的所有函式中,傳遞到函式中的引數全部是按數值傳遞的(by value)。也就是說,當我們呼叫一個帶有引數的函式時,我們傳遞到函式中的是變

C++引用做函式引數函式的返回值是引用的幾種情況

引用做函式引數引用的內部實現,是常指標,所以引用其實是對指標做了一些限制,這種限制的意義是在某些應用場景中,使用引用具有更好的 實用性和可讀性。具體講,引用最常見的用處是在做函式引數的時候,對比指標做函式引數,比如:指標做函式引數:void myswap(int *a,int

函式模板函式模板例項化、函式模板過載

模板是泛型程式設計的基礎。所謂泛型程式設計就是編寫與型別無關的邏輯程式碼,是一種複用的方式。模板分為模板函式和模板類。 如果是交換兩個資料,我們會定義對應型別的函式,比如要交換int型別資料,我們會定義int型別swap函式,如果是交換double型別資料,會再定義double型別交換函式。

C++Primer_Chap16_模板泛型程式設計_List03_過載模板_筆記

  函式模板可以被另一個模板或普通非模板函式過載。與往常一樣,名字相同的函式必須具有不同數量和型別的引數。涉及函式模板,函式匹配規則會在以下幾方面受到影響: 對於一個呼叫,其候選函式包括所有模板實參推斷成功的函式模板例項 候選的函式模板總是可行的,因為模板實參推斷會排除任何