C++ में typedef और using में क्या अंतर है? कब क्या उपयोग करें?
नमस्ते साथियों! मैंने हाल ही में C++ सीखना शुरू किया है और टाइप एलियास बनाने के दो तरीकों पर ध्यान गया: पुराना `typedef` और नया `using` (या alias declaration), जो C++11 में आया।
मैं समझता हूँ कि दोनों एक ही काम करते हैं। उदाहरण के लिए, मैं लिख सकता हूँ:
```cpp
typedef unsigned long long ULL;
using ULL = unsigned long long;
```
और कोई अंतर नहीं लगता। लेकिन मैंने सुना है कि `using` बेहतर है और आधुनिक कोड में इसकी सिफारिश की जाती है। क्यों? असली अंतर क्या है? क्या ऐसे मामले हैं जहाँ `typedef` काम नहीं करता, लेकिन `using` करता है? या इसके विपरीत?
मुझे विशेष रूप से जटिल मामलों में दिलचस्पी है: फंक्शन पॉइंटर्स, टेम्पलेट्स, नेस्टेड टाइप्स के साथ काम करना। मैंने `typedef` के माध्यम से टेम्पलेट क्लास के लिए एलियास बनाने की कोशिश की और यह काम नहीं किया। शायद मैं कुछ गलत कर रहा हूँ।
यह उदाहरण है जो मुझे भ्रमित करता है:
```cpp
// क्या यह काम करता है?
template
typedef std::vector Vec; // कंपाइलेशन एरर!
// और यह?
template
using Vec = std::vector