1. 程式人生 > >使用模板類,模板方法實現switch case功能

使用模板類,模板方法實現switch case功能

#include "iostream"

using namespace std;

enum EnumValue
{
One = 100,
Two,
Three
};


template<class EnumType>
struct EnumValueUnit
{
intindexValue;
EnumType enumValue;
};


#define  InvalidateValue((int)-1)
template<typename EnumType>
EnumType MatchToEnum(int index, const EnumValueUnit<EnumType> *enumMap)
{
size_t i = 0;
for (; enumMap[i].indexValue != InvalidateValue; ++i)
{
if (index == enumMap[i].indexValue)
break;
}
return enumMap[i].enumValue;
}


void main()
{
static EnumValueUnit<EnumValue> testMap[] =
{
1,One,
2,Two,
3,Three,
InvalidateValue,One,
};


EnumValue value = MatchToEnum(2, testMap);


cout << value << endl;
}

相關推薦

使用模板模板方法實現switch case功能

#include "iostream" using namespace std; enum EnumValue {One = 100,Two,Three }; template<class EnumType> struct EnumValueUnit {inti

模板模板成員函式模板巢狀

在模板類中宣告一個模板成員函式,定義方式:.h檔案   template <typename T, std::size_t N> struct MsgOperaTrait : MsgOperaBase {     enum {MSGID = N};     t

模板模板函式特例化模板特例化

今天在看某c++框架原始碼時,發現模板類裡的部分函式可以特例化,感覺很神奇便嘗試了下,發現很多平時不會注意的c++細節及知識,寫下來分享給大家,以便大家遇到相似問題時可以少踩點坑。 模板類會出現連結問題,編譯不通過 如果模板類.h檔案和.cpp檔案

C++模板實現模板函式和模板附帶模板實現順序表和連結串列程式碼)

模板  當我們實現一個交換函式時,我們可以寫成如下。 void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; }  這裡只能交換兩個整數,當我們

十一、接口(接口的概念實現繼承實現)、抽象與抽象方法(抽象抽象方法概念使用)

輸出 重寫 關鍵字 new clas main ride ring strac 接口 接口是一種用來定義程序的協議,它描述可屬於任何類和結構的一組相關行為。 接口可由方法、屬性、事件和索引器這四種成員類型的任何組合構成,但不能包含字段。 接口通過類繼承來實現,一個類雖然只能

c++中模板實現模板模板函數)

c++ 模板實例化 泛型編程 [TOC] 模板  當我們實現一個交換函數時,我們可以寫成如下。 void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; }  這裏只能交換兩個整

IntelliJ Idea註釋模板--註釋、方法註釋

剛從Eclipse切換到IntelliJ Idea,之前使用eclipse時用到了註釋模板,包括類註釋和方法註釋,現在分別講一下在Intellij Idea中如何進行配置,作為備忘 一. 類註釋模板配置 1. 配置效果 2. 配置方法  【File】-->【settings】--&

c++通用模板(template class)定義實現詳細介紹

有時,有兩個或多個類,其功能是相同的,僅僅是資料型別不同,如下面語句聲明瞭一個類: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

[C++]模板的宣告與實現分離問題

本文,記錄C++模板類的實現。 實驗環境: linuxg++c++98 模板類的宣告與實現分離錯誤 目的:實現一個bag類 做法:模板類bag的宣告與實現分離,也就是.cpp和.h檔案分離 此

限制input輸入型(多種方法實現)

numbers set 字母 [0 bst 字符 限制 urn 運算符號 1.只能輸入和粘貼漢字 <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,‘‘)" onbeforepaste="clipboard

main()方法

平臺 大括號 ima 找不到 img 入口 屬於 錯誤 一個 一、類 1.Java 源文件名必須與類名相同。Java源文件後綴名必須是java; 2.類的內容就是類名後面的一對大括號{}括起來的內容; 二、方法 1.方法也有方法名,有方法內容(方法體即方法的主體)。方法體是

JAVA基礎篇—抽象抽象方法

java b- rec package rate idt -c over stub class Shape 1 package com.shape; 2 3 public abstract class Shape { 4 double area;//

__call__方法和單例模式

rom pan AR erro metaclass self acl clas HA 在python中一切皆對象的概念。 舉一個例子: class Chinese: country=“china” def __init__(self, name,age,s

python用字典實現switch..case類似的函數調用

python info 調試 turn return 字典 elif 實現 不同 python中沒有swich..case,若要實現一樣的功能,又不想用if..elif來實現,可以充分利用字典進行實現 主要是想要通過不同的key調用不同的方法,在學習過程中,發現不管輸入的k

C++ 中模板模板成員函數在外定義

成員函數 成員 typename 開源 splay 開源代碼 pen color play 因為很多書都沒講到這種情況, 曾經有這個問題但一直沒答案,所以我一直以為模板類的模板成員函數只能在類內定義,直到我在某個開源代碼裏看到原來要加兩個 template<>

多對多作為外鍵getset方法實現

models ble -s ret lec min ren 沒反應 classes get_class.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=

Java第一階段(10)【 Objectequals方法四大許可權修飾符】 11.19

第一階段 Object 類 方法 toString() 方法equals() java四大許可權修飾符 java中所有基本資料型別所對應的引用資料型別 快捷鍵 Object 類 Object:所有類的祖宗,

結合多個例項深入理解js的深拷貝和淺拷貝多種方法實現物件的深拷貝

親們為什麼要研究深拷貝和淺拷貝呢,因為我們專案開發中有許多情況需要拷貝一個數組抑或是物件,但是單純的靠=“賦值”並不會解決所有問題,如果遇到引用型別的物件改變新賦值的物件會造成原始物件也發生同樣改變,而要去除影響就必須用到深拷貝,深拷貝,對於引用物件需要進行深拷貝才會去除影響。如果是值型別直接“=”

c# 介面抽象抽象方法的例項

用抽象方法和介面實現: 1 建立一個人的類包含屬性:姓名,年齡,性別,住址  對屬性進行封裝,自我介紹,吃的方法 2 建立一個男人的類繼承於人的類,建立一個獨有的特性:體重,對自我介紹的方法進行重寫(輸出:我是?,我來自於?,我的性別是?) 3 建立一個女人的類繼承於人的類

C#密封密封方法異常基本語法

一、密封類 密封基本常識: 密封類可以用來限制擴充套件性,如果密封了某個類,則其他類不能從 該類繼承。 如果密封了某個成員,則派生類不能重寫該成員的實現。 預設情況下,不應該密封類和成員。 密封可以防止對庫的型別和成員進行自定義。 C#中使用密封類時,如果類滿足