首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++中空类的优点

C++中空类的优点
EN

Stack Overflow用户
提问于 2010-10-27 23:59:01
回答 8查看 21.5K关注 0票数 21

拥有一个空类可能有什么好处/用处?

附言:这个问题对你们中的一些人来说可能是微不足道的,但它只是为了学习目的,没有实际意义。仅供参考,谷歌搜索也没什么帮助。

EN

回答 8

Stack Overflow用户

发布于 2010-10-28 01:12:03

例如,下面的代码可以用来拥有一个可以包含(SQL) null值的boost::variant

代码语言:javascript
复制
class Null { };

typedef boost::variant<Null, std::string, int> Value;

为了让它更有用,像operator==operator<<这样的东西是很方便的。例如:

代码语言:javascript
复制
std::ostream& operator<<(std::ostream &lhs, const Null &rhs)
{
     lhs << "*NULL*";
     return lhs;
}

int main()
{
    Variant v("hello");
    std::cout << v << std::endl;
    v = Null();
    std::cout << v << std::endl;
    ...
}

将给予:

代码语言:javascript
复制
hello
*NULL*
票数 5
EN

Stack Overflow用户

发布于 2010-10-28 00:22:07

在C++的标准模板库中,例如你有

代码语言:javascript
复制
template<class _Arg,
 class _Result>
struct unary_function
    { // base class for unary functions
 typedef _Arg argument_type;
 typedef _Result result_type;
    };

在定义函数器时,您可以继承unary_function,然后您可以根据自己的需要自动定义类型定义。

票数 2
EN

Stack Overflow用户

发布于 2010-10-28 00:06:57

一个空类可以被用作一个“令牌”来定义一些独特的东西;在某些模式中,您需要一个唯一的实例的实现无关的表示,除了它的唯一性之外,它对开发人员没有任何价值。一个例子是Unit of Work;您可能一点也不关心您的执行器内部发生了什么,但是您希望告诉该执行器您告诉它要执行的任务是原子集的一部分。在这种情况下,向外界表示工作单元的空类可能是完美的;几乎任何工作单元对象可以存储或执行的操作(封装DB事务、公开提交/回滚行为)都会将您绑定到特定的实现,但是对象引用对于提供对原子任务集的唯一但可复制和可传递的引用非常有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4035180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档