struct:所有成员都是public
当我们需要直接访问结构或者类的数据成员时,而不欲打破类(class
)对数据成员都是protected
或者private
的约定俗成的规范(convention),这时struct
便是一个更为合适的选择,比如C++标准库对pair
工具类(在<utility>
中定义)的设计:
namespace std
{
template<typename T1, typename T2>
struct pair
{
// member
T1 first;
T2 last;
}
}
因为我们在客户端编程时,是把pair对象当做一种容器
来使用的,既然是容器,存取元素便是基本操作:
std::pair<T1, T2> p = getAPair();
p.first ...
p.second ...
function object
当作为仿函数的一些类没有特别的数据成员时或者继承体系时,而且主要是一个括号运算符重载(operator())时,一般使用struct
来定义:
我们暂且以一元运算unary_negate
为例:
template<typename Arg, typename Result>
struct unary_function
{
typedef Arg argument_type;
typedef Result result_type;
}
template<typename T>
struct negate :public unary_function<T, T>
{
T operator()(const T& x)const
{
return -x;
// 本质的操作就这一句,
// 接收一个T类型的变量,返回其负值
}
}
客户端程序:
int main(int, char**)
{
std::vector<int> src{0, 1, 2, 3, 4};
std::vector<int> dst(src.size());
std::transform(ivec.begin(), ivec.end(),
dst.begin(),
::negate<int>());
std::copy(dst.begin(), dst.end(),
std::ostream_iterator<int>(std::cout, " "));
return 0;
}