CheckReturn(检查返回值)

原创 2015年07月09日 22:49:44

Loki库提供了一种方法,要求函数返回后,使用者必须对其进行检查或则赋值。以必须判断指针为例进行说明。

自己写的代码简化了很多

CheckReturn.h

#pragma once
#include <assert.h>

template<class T>
struct TriggerAssert
{
 static void run(const T&)
 {
  assert( 0 );
 }
};

// 检查函数返回值是否被赋值了,如果没有被赋值,则认为是非法的。必须给返回值赋值,即必须有所有权,不能出现中间变量
template<typename T, template<typename T> class TAssert = TriggerAssert>
class CCheckReturn
{
public:
 /// Conversion constructor changes Value type to CheckReturn type.
 inline CCheckReturn( const T* value )
  : m_value( value ), m_checked( false )
 {

 }

 /// 转移所有权
 inline CCheckReturn( const CCheckReturn & that ) :
 m_value( that.m_value ), m_checked( false )
 { that.m_checked = true; }

 /// 必须转换成bool检查
 // 此处也可以将bool替换成T表示必须赋值
 inline operator bool ( void )
 {
  m_checked = true; // 被转换过了
  return NULL != m_value;
 }
 
 inline ~CCheckReturn( void )
 {
  // asset或则其它方式也可以
  if (!m_checked)
   TriggerAssert<const T*>::run(m_value);
 }
private:
 const T* m_value;
 mutable bool m_checked; //是否被check过了。如果调用过operator则会赋值为true
};


测试使用。

#include "StdAfx.h"
#include "TestCheckReturn.h"
#include "CheckReturn.h"

class CTestPtr
{

};

CCheckReturn<CTestPtr> GetPtr()
{
 return CCheckReturn<CTestPtr>(new CTestPtr);
}
 
void CTestCheckReturn::Test()
{
 CCheckReturn<CTestPtr> aa = GetPtr();

 //if (aa) // 如果没有这句话,退出时就会进入我们的断言了
 {

 }
 int ii = 10;
}


我们可以根据这个思想实现我们想要的其它检查



make对命令返回值的检测

最近修改项目代码的时候发现一个很奇怪的现象,make在遇到编译错误的时候并没有终止,而是正常的生成了目标文件,当然使用这个目标文件时给我带来了很多痛楚…让我们一起来填平这个坑吧,相关Makefile如...
  • lidonghat
  • lidonghat
  • 2016年05月13日 19:58
  • 2108

查看LoadRunner脚本请求日志和服务器返回值方法

转载于:http://www.blogjava.net/qileilove/archive/2013/11/01/405884.html  1、  查看所有请求日志和请求响应信息:   采用L...
  • lcm_up
  • lcm_up
  • 2013年11月11日 15:51
  • 2350

C语言strstr()函数:返回字符串中首次出现子串的地址

摘要:北京领卓转载http://blog.csdn.net/qq_21792169/article/details/51147489
  • bjlingzhuo
  • bjlingzhuo
  • 2016年04月14日 09:37
  • 2018

利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程

 1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况 (1)如果通过查询分...
  • wsq2002
  • wsq2002
  • 2011年02月17日 10:21
  • 3978

LR设置返回值检查点&打印输出执行日志

LR脚本实例: //登录事务开始 lr_start_transaction("trans_login"); //设置检查的内容,在savecount变量里面记录查找到的次数 web_reg...
  • cdfn_wsj
  • cdfn_wsj
  • 2012年09月20日 16:43
  • 1806

检查new的返回值及new的用法

我们知道,使用malloc/calloc等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即是检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单的把这...
  • mafuli007
  • mafuli007
  • 2012年03月06日 09:11
  • 6380

检查Pthreads函数的返回值

一定要检查函数的返回值        《C/C++软件测试规范》上有很重要的一条就是要检查所有返回值不为空的函数的返回值来判断库函数或者系统调用的执行是否成功。如果读一些经典开源代码,你会发现几乎...
  • whm2300
  • whm2300
  • 2013年10月19日 11:12
  • 377

cef 带返回值的js调用

  • 2017年12月11日 10:32
  • 812KB
  • 下载

winform 链式委托的返回值源码

  • 2009年11月26日 14:13
  • 17KB
  • 下载

ping返回值

  • 2008年01月05日 18:51
  • 94KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CheckReturn(检查返回值)
举报原因:
原因补充:

(最多只允许输入30个字)