2013-02-07 22 views
6

मैं सी में एक लिंक्ड सूची कार्यान्वयन लिख रहा हूं, और मेरे काम को आसान बनाने के लिए सी ++ के टेम्पलेट के समतुल्य भाषा सुविधा का उपयोग करना चाहता हूं।सी प्रोग्रामिंग भाषा में टेम्पलेट्स हैं?

क्या ऐसी सुविधा मौजूद है?

+1

इस संदर्भ में "टेम्पलेट" से आपका क्या मतलब है? – cnicutar

+2

टेम्पलेट्स सी ++ प्रोग्रामिंग भाषा की एक विशेषता है जो कार्यों और वर्गों को जेनेरिक प्रकारों के साथ संचालित करने की अनुमति देती है। –

+0

आपको बहुत धन्यवाद – user1722022

उत्तर

2

हां list.h है। और यह एक गोलाकार लिंक्ड सूची है:

निम्न लिंक में इसका उपयोग करने के लिए example है।

list.h, परिभाषा की तरह एक परिपत्र लिंक्ड सूची के प्रबंधन से संबंधित सभी कार्यों में शामिल है सिर में जोड़ने के लिए, परिपत्र लिंक्ड सूची ब्राउज़ करने के लिए पूंछ में जोड़ने, हटाने, foreach समारोह ...

+1

यह लिनक्स कर्नेल के लिए विशिष्ट उत्तर है, यह "सी में" के बारे में एक सामान्य उत्तर नहीं है। मुझे यह अजीब लगता है कि इसे वोट दिया गया है। – unwind

+2

@unwind: मुझे पता है कि list.h कर्नेल लिनक्स में प्रयोग किया जाता है। लेकिन लिंक्स में मैं सूची के लिए इस उत्तर में देता हूं। सूची.h का एक और वितरण है और यह लिनक्स के उपयोगकर्ता स्पेस में काम करता है और यह पोर्टेबल है। मैं इसे अपने सभी उपयोगकर्ता अंतरिक्ष एप्लिकेशन में विकसित करता हूं और यह ठीक काम करता है। – MOHAMED

+0

@unwind उत्तर में दिए गए लिंक में इस पैराग्राफ का संदर्भ लें उदाहरण के लिए http://isis.poly.edu/kulesh/stuff/src/klist/ 'बहुत कम संशोधन के साथ (सूची आइटमों के हार्डवेयर प्रीफेचिंग को हटाकर) हम कर सकते हैं हमारे आवेदनों में इस सूची का भी उपयोग करें। इस फ़ाइल का एक प्रयोग करने योग्य संस्करण डाउनलोड के लिए यहां उपलब्ध है। – MOHAMED

6

सी है सी ++ जैसे कोई टेम्पलेट्स नहीं है, हालांकि आप #define मैक्रोज़ का उपयोग करते हुए "चालाक" (या WTFey, इस पर निर्भर करते हुए) के समान कुछ प्राप्त कर सकते हैं।

हालांकि, उदाहरण के लिए जीएलआईबी singly linked lists या doubly linked lists के लिए कैसे करता है, इस पर एक नज़र डालें।

+1

+1 – Brendan

3

टेम्पलेट्स सी ++ की विशेषताएं हैं, लेकिन यदि आप सिंगल-या दोगुनी-लिंक्ड सूची का एक प्रकार-स्वतंत्र कार्यान्वयन चाहते हैं, तो इसे मैक्रोज़ की मदद से बनाया जा सकता है, या आप अपनी संरचना में void* पॉइंटर्स स्टोर कर सकते हैं।

बेशक, इंटरनेट पर ऐसे कई कार्यान्वयन हैं। @MohamedKALLEL और @hyde ने पहले से ही लिनक्स कर्नेल और जीएलआईबी से एक उदाहरण दिए हैं, मैं बस अच्छी छोटी लाइब्रेरी uthash के बारे में एक नोट जोड़ना चाहता हूं।

यह सी में एक हैश तालिका को लागू करता है, लेकिन यह भी एक utlist.h कि singly- और दोगुना से जुड़े (और यहां तक ​​कि परिपत्र) लागू करता है मैक्रो पर सूचीबद्ध करता है पूरी तरह। यही है, आप बस इस फ़ाइल को ले सकते हैं, इसे शामिल कर सकते हैं और या तो इन मैक्रोज़ का उपयोग कर सकते हैं, या अपनी आवश्यकताओं के लिए इसे संशोधित कर सकते हैं। यह भी अच्छा है कि आप इसके साथ अपने किसी भी डेटास्ट्रक्चर का उपयोग कर सकते हैं: इसे केवल next पॉइंटर (और prev, दोगुनी-लिंक के मामले में) की आवश्यकता है।

पी। लेकिन मैक्रोज़ का उपयोग करते समय हमेशा याद रखें: महान शक्ति के साथ बड़ी ज़िम्मेदारी आता है। मैक्रोज़ शक्तिशाली हैं, लेकिन बेहद असुरक्षित और अपठनीय हो सकते हैं। सावधान रहें!

0

हाय मैं जुड़ा हुआ सूचियों के बारे में पता नहीं है, लेकिन एक टेम्पलेट समारोह के लिए यू शायद एक मैक्रो या इस कार्यक्रम एक उदाहरण के रूप तर्क की संख्या बदलती के साथ एक समारोह का उपयोग कर सकते

#include <stdarg.h> 
#include <stdio.h> 
#define INT 0 
#define STR 1 
void foo(int type, ...) 
{ 
    va_list ap; 
    int i; 
    char *s; 
    va_start(ap, type); 
    switch(type) { 
    case INT: 
     i = va_arg(ap, int); 
     printf("INT: %i\n", i); 
     break; 
    case STR: 
     s = va_arg(ap, char *); 
     printf("STR: %s\n", s); 
     break; 
    default: 
     break; 
    } 
    va_end(ap); 
} 
#define SWAP(type, a, b) {     \ 
     type t;         \ 
     t = a;         \ 
     a = b;         \ 
     b = t;         \ 
    } 
int main(void) 
{ 
    foo(INT, 3); 
    foo(STR, "baz"); 
    int ia = 0, ib = 3; 
    SWAP(int, ia, ib); 
    printf("%i %i\n", ia, ib); 
    float fa = 0.5, fb = 3.14; 
    SWAP(float, fa, fb); 
    printf("%f %f\n", fa, fb); 
    return 0; 
} 

उत्पादन का उत्पादन होगा

INT: 3 
STR: baz 
3 0 
3.140000 0.500000 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^