ลองนึกถึงสถานการณ์ที่มี 2 คนชื่อเดียวกัน คือ "Zara" ในห้องเรียนเดียวกัน เมื่อต้องแยกแยะพวกเขา เราจะต้องใช้ข้อมูลเพิ่มเติม เช่น พื้นที่ที่อยู่ ถ้าอยู่คนละเขต หรือชื่อแม่/พ่อ เป็นต้น
สถานการณ์เดียวกันอาจเกิดขึ้นใน C++ applications เช่น คุณเขียนโค้ดที่มีฟังก์ชันชื่อ xyz() และมี library อีกตัวก็มีฟังก์ชัน xyz() เช่นกัน Compiler ไม่มีทางรู้ว่าคุณหมายถึง version ไหนของ xyz() ในโค้ดของคุณ
Namespace ถูกออกแบบมาเพื่อแก้ปัญหานี้ ใช้เป็นข้อมูลเพิ่มเติมเพื่อแยกแยะฟังก์ชัน คลาส ตัวแปร ที่มีชื่อเหมือนกันแต่มาจาก library ต่างกัน ด้วย namespace คุณสามารถกำหนด context (บริบท) ที่ชื่อถูกนิยามได้ โดยพื้นฐานแล้ว namespace กำหนด scope (ขอบเขต) ให้กับชื่อต่างๆ
การกำหนด Namespace (Defining Namespace)
Namespace definition เริ่มด้วยคีย์เวิร์ด namespace ตามด้วยชื่อ namespace ดังนี้:
namespace namespace_name {
// code declarations
}
เพื่อเรียกใช้ version ที่เปิดใช้งาน namespace ของฟังก์ชันหรือตัวแปร ให้เติม :: นำหน้าชื่อ namespace ดังนี้:
name::code; // code อาจเป็นตัวแปรหรือฟังก์ชัน
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
// namespace แรก
namespace first_space {
void func() {
cout << "Inside first_space" << endl;
}
}
// namespace ที่สอง
namespace second_space {
void func() {
cout << "Inside second_space" << endl;
}
}
int main() {
// เรียกฟังก์ชันจาก namespace แรก
first_space::func();
// เรียกฟังก์ชันจาก namespace ที่สอง
second_space::func();
return 0;
}
ผลลัพธ์
Inside first_space Inside second_space