1. 程式人生 > >在c/c++中使用字串動態呼叫函式

在c/c++中使用字串動態呼叫函式

在專案的開發過程中,需要使用到類似Java的反射機制,根據提供的字串,動態的呼叫指定的函式。

Java反射機制:this.getClass().getMethod("test_"+interfaceName,null).invoke(this,null);

如:傳入main,則會動態呼叫 test_main函式

而c中的函式呼叫,實際上是通過函式指標的方式來呼叫的。

所以可以考慮建立一個結構體 struct func_map {char *funcName;void (*func) ();};

其中funcName 存放函式對應的字串,而func則存放字串對應的函式指標,在呼叫時,先判斷傳入的引數是否與funcName相等,若相等則呼叫其對應的函式

struct func_map {char *funcName;void (*func) ();};

void func1 (){printf("func1\n");

void func2(){printf("func2\n");

int main()

{

     struct func_map map[2] = {{"func1",func1},{"func2",func2}};

     map[0].func1(); //呼叫func1 函式

}

相關推薦

c/c++使用字串動態呼叫函式

在專案的開發過程中,需要使用到類似Java的反射機制,根據提供的字串,動態的呼叫指定的函式。 Java反射機制:this.getClass().getMethod("test_"+interfaceName,null).invoke(this,null); 如:傳入main

c++使用指標呼叫函式和使用指標呼叫類物件的()過載函式

使用函式指標時,指標可以像函式名一樣,直接加括號和引數列表呼叫;也可先解引用再呼叫 //include directories... using namespace std; void testFun() { cout<<"this is

C語言進階之路------字串的反序輸出(輸入字串然後呼叫函式反序輸出)

#include<stdio.h> #include<string.h> int main() {void fanxu(char x[]);char a[80];scanf("%s",a);fanxu(a);printf("%s\n",a);retu

C#Winform動態呼叫Webservice的方法

一般情況下winform呼叫webservice時步驟 1新增服務引用---高階----新增web引用------填寫url--新增web引用即可完成對webservice的引用 讓VS.NET環境來為我們生成服務代理,然後呼叫對應的Web服務。 如果需要動態呼叫WebSe

模擬實現c語言動態記憶體分配malloc函式

動態儲存器分配器維護著一個程序的虛擬的儲存器區域,稱為堆(heap)。分配器將堆視為一組不同大小的塊的集合來維護。每個塊就是一個連續的虛擬儲存器片(chunk),要麼是已經分配的,要麼是空閒的。 我們這裡把記憶體堆空間模擬為一個位元組陣列buf[1000],塊的資料結構為:

C語言變數名及函式名的命名規則與駝峰命名法

一、C語言變數名的命名規則:(可以字母,數字,下劃線混合使用) 1. 只能以字母或下劃線開始;2. 不能以數字開始;3. 一般小寫;4. 關鍵字不允許用(eg:int float=2//error  float 為保留字不允許用); 二、函式名的命名規則 1.見名知意;2.自定義函式函式名首字

記錄一下C語言字串的相關問題!

最近在努力提高自己程式設計水平,想著先把C語言溫習一下吧! 結果發現好久不程式設計,大一學的C語言全還給老師了!只能邊搜尋,邊寫了,記錄我的錯誤!都是老師講過的,當時太年輕沒實踐!! 所以學程式碼還得多寫啊!! 主要集中處理字串這一塊的內容! 問題1:讀取問題 char plai

C語言的字串輸入fgets()函式

C語言的字串輸入fgets()函式 圖片來源-百度圖片 fgets()函式簡介 讀字串函式fgets()的功能是從指定的檔案中讀一個字串到字元陣列中,函式呼叫的形式為: fgets(字元陣列名,n,檔案指標),要從鍵盤輸入時檔

C 實現 刪除字串空白符的函式 strtrim

說在前面的話 字串操作在很多C語言比賽裡面都有涉及,最近公眾號裡面的C語言比賽,都是兩個關於字串操作的題目,希望大家認真看題目。 直接上程式碼 /*****************************************************************

C語言:字串處理類函式

strlen() 求字串的實際長度(不包括'\0')   strcpy() char *strcpy(char* dest, const char *src); strcpy(目標串,源串); strcp

關於C#程式設計方法的呼叫

C#在VS程式設計中,方法的定義以及呼叫: 諾在同一名稱空間,同一類下的方法呼叫: 如果方法宣告中有static,可以直接使用該類名進行呼叫。由於是在同一類下的方法,所以在呼叫方法時可以不用加類名稱。例如程式: namespace STA { class Program

C語言巨集定義和函式的取捨

原文連結:http://www.embedu.org/Column/Column177.htm 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既可以寫成函式,也可以

C語言的輸入輸出函式(學習筆記)

文章目錄 c語言中的基本輸入與輸出函式 1.格式化輸入輸出函式 1.1printf()函式 1.2scanf()函式 2.非格式化的輸入輸出函式 2.1puts()和gets()函式

C語言學習及應用筆記之七:C語言的回撥函式及使用方式

  我們在使用C語言實現相對複雜的軟體開發時,經常會碰到使用回撥函式的問題。但是回撥函式的理解和使用卻不是一件簡單的事,在本篇我們根據我們個人的理解和應用經驗對回撥函式做簡要的分析。 1、什麼是回撥函式   既然談到了回撥函式,首先我們就要搞清楚什麼是回撥函式。在討論回撥函式之前,我們需要說明另一個概念,

javascript根據函式名稱字串,動態執行函式

<script> //動態函式呼叫,呼叫者使用"targetFunction" function targetFunction() { alert(11111); return 9;

c語言的回撥函式

先來一段程式碼 #include<stdio.h> void show(void(*ptr)()){  (* ptr)();   } void show1(){ printf("hello world"); } void show2(){ printf("ni

c++ STL的全排列函式

標頭檔案: #include<algorithm> 函式原型: bool next_permutation(iterator start, iterator end); next_per

C語言字串賦值處理方式

C語言中,字串可以賦值給字元指標變數,或者將字串用字元陣列儲存。因為c語言沒有直接對字串提供語法糖方面的支援。而且C標準庫很多方法處理字串是以空字元結尾為前提的,這個必須要記住。 char *p,a='5'; p=&a;

C++Builder傻瓜式呼叫com元件。

最近在網上發現c++builder中提供的CreateOleObject類對於com元件的呼叫十分實用,下邊是呼叫iTrusPTA.dll的一個示例; CoInitialize(NULL); Variant pta = CreateOleObject("PTA.iTrusPT

C語言常用的庫函式

C語言中常用的標頭檔案如下: <assert.h> 斷言             <float.h> 浮點數運算 <locale.h> 本土化           <math.h> 數學函式 <signal.h>