C++ 命名空间的使用例子
目的:了解C++ 命名空间的使用方法.命名空间内可以使用变量,函数,类,甚至是类模板.其实命令空间可以看作是一个带公有成员的类对象.
源码:
[user:lib_hdmanage] cat example/main.cpp
/// @file main.cpp
/// @brief
/// @author EastonWoo
/// 0.01
/// @date 2013-04-23
namespace nm_spc
{
int nm_val = 1; //定义变量.可以初始化
void print() //定义函数
{
printf("namespace:nm_spc\n");
}
template <typename T> //定义类模块
class A
{
public:
A(T a, T b)
{
m_a = a;
m_b = b;
}
T max();
private:
T m_a;
T m_b;
};
template <typename T> //max函数在类模板外定义.
T A<T>::max()
{
T ret = 0;
if(m_a >= m_b)
ret = m_a;
else
ret = m_b;
return ret;
}
}
int main()
{
nm_spc::A<int> clsA(1,2);
nm_spc::A<double> clsB(10000.0,20000.0);
printf("%d\n",clsA.max());
printf("%f\n",clsB.max());
nm_spc::print();
nm_spc::nm_val = 3; //可以赋值,不赋值,nm_spc::nm_val = 1;
printf("%d\n",nm_spc::nm_val);
return 0;
}
运行结果:
[user:lib_hdmanage] ./example/main.i386.elf
2
20000.000000
namespace:nm_spc
3
命名空间里的实现都放到外面去实现(源码作一下变形):
[user:lib_hdmanage] cat example/main.cpp
/// @file main.cpp
/// @brief
/// @author EastonWoo
/// 0.01
/// @date 2013-04-23
namespace nm_spc
{
int nm_val = 1;
void print();
template <typename T>
class A
{
public:
A(T a, T b);
T max();
private:
T m_a;
T m_b;
};
}
void nm_spc::print() //在命名空间外定义,须加nm_spc:: ,我们可以看出,很像类的外部定义.
{
printf("namespace:nm_spc\n");
}
template <typename T>
nm_spc::A<T>::A(T a, T b)
{
m_a = a;
m_b = b;
}
template <typename T>
T nm_spc::A<T>::max() //命名空间里的类模板的成员函数在命名空间外定义.出了两层.第一层A<T>:: ,第二层nm_spc::
{
T ret = 0;
if(m_a >= m_b)
ret = m_a;
else
ret = m_b;
return ret;
}
int main()
{
nm_spc::A<int> clsA(1,2);
nm_spc::A<double> clsB(10000.0,20000.0);
printf("%d\n",clsA.max());
printf("%f\n",clsB.max());
nm_spc::print();
nm_spc::nm_val = 3; //相当于公有成员变量赋值
printf("%d\n",nm_spc::nm_val);
return 0;
}