O'Reilly logo

C++ Cookbook by Jeff Cogswell, Jonathan Turkanis, Christopher Diggins, D. Ryan Stephens

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

2.4. Preventing Name Collisions with Namespaces

Problem

You have names from unrelated modules that are clashing, or you want to avoid such clashes by creating logical groups of code in advance.

Solution

Use namespaces to modularize code. With namespaces, you can group large groups of code in separate files into a single namespace. You can nest namespaces as deeply as necessary to partition a large module into submodules, and consumers of your module can selectively expose the elements in your namespace they want to use. Example 2-5 shows a few of the ways you can use a namespace.

Example 2-5. Using namespaces

// Devices.h #ifndef DEVICES_H_ _ #define DEVICES_H_ _ #include <string> #include <list> namespace hardware { class Device { public: Device() : uptime_(0), status_("unknown") {} unsigned long getUptime() const; std::string getStatus() const; void reset(); private: unsigned long uptime_; std::string status_; }; class DeviceMgr { public: void getDeviceIds(std::list<std::string>& ids) const; Device getDevice(const std::string& id) const; // Other stuff... }; } #endif // DEVICES_H_ _ // Devices.cpp #include "Devices.h" #include <string> #include <list> namespace hardware { using std::string; using std::list; unsigned long Device::getUptime() const { return(uptime_); } string Device::getStatus() const { return(status_); } void DeviceMgr::getDeviceIds(list<string>& ids) const { } Device DeviceMgr::getDevice(const string& id) const { Device d; return(d); } } // DeviceWidget.h #ifndef ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required