`
chenqi210
  • 浏览: 78673 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nullable (bug)

    博客分类:
  • c++
阅读更多

 

#ifndef NULLABLE_H
#define NULLABLE_H

#include "odbclib.h"

namespace odbclib
{
template<typename T>
class Nullable
{
	typedef T const& const_reference;
	typedef T const* const_pointer;
public:
	Nullable()
		:m_value(T()),
		m_isNull(true)
	{
	}

	Nullable(T const& value)
		:m_value(value)
	{
	}

	bool isNull() const{return m_isNull;}

	operator T()throw(runtime_error)
	{
		if(isNull())
			throw runtime_error("null has no value");
		return m_value;
	}

	operator T()const throw(runtime_error)
	{
		if(isNull())
			throw runtime_error("null has no value");
		return m_value;
	}

	Nullable& operator=(Nullable const& value)
	{
		if(value.isNull())
			m_isNull = true;
		return *this;
	}

	Nullable& operator=(T const& value)
	{
		m_value = value;
		m_isNull = false;
		return *this;
	}


	T const& value()const throw(runtime_error)
	{
		if(isNull())
			throw runtime_error("null has no value");
		return m_value;
	}

	T& value()throw(runtime_error)
	{
		if(isNull())
			throw runtime_error("null has no value");
		return m_value;
	}
public:
	static Nullable const& Null;

private:
	T m_value;
	bool m_isNull;

	template<typename V>
	friend ostream& operator<<(ostream&,Nullable<V> const&) throw(runtime_error);

	template<typename V>
	friend istream& operator>>(istream&,Nullable<V> &);
};

template<typename T>
Nullable<T> const& Nullable<T>::Null = Nullable<T>();

template<typename T> 
ostream& operator<<(ostream& os,Nullable<T> const& value) throw(runtime_error)
{
	if(value.m_isNull)
		throw runtime_error("null has no value");
	os << value.m_value;
	return os;
}

template<typename T>
istream& operator>>(istream& is,Nullable<T> &value)
{
	is >> value.m_value;
	return is;
}

template<>
class Nullable<string>
{
public:
	Nullable()
		:m_value(string()),
		m_isNull(true)
	{

	}

	Nullable(string const& value)
		:m_value(value),
		m_isNull(false)
	{
	}

	Nullable(char const* value)
		:m_value(value),
		m_isNull(false)
	{
	}

	Nullable(Nullable const& other)
	{
		m_value = other.m_value;
		m_isNull = other.m_isNull;
	}

	template<size_t N>
	Nullable(char const (&a)[N])
		:m_value(a),
		m_isNull(false)
	{
	}

	bool isNull() const{return m_isNull;}

	operator string()throw(runtime_error)
	{
		if(isNull())
			throw runtime_error("null has no value");
		return m_value;
	}

	operator string()const throw(runtime_error)
	{
		if(isNull())
			throw runtime_error("null has no value");
		return m_value;
	}

	Nullable& operator=(char const* value)
	{
		m_value.assign(value);
		m_isNull = false;
		return *this;
	}

	string const& value()const throw(runtime_error)
	{
		if(isNull())
			throw runtime_error("null has no value");
		return m_value;
	}

	string& value()throw(runtime_error)
	{
		if(isNull())
			throw runtime_error("null has no value");
		return m_value;
	}
public:
	static Nullable const& Null;

private:
	string m_value;
	bool m_isNull;

	template<typename V>
	friend ostream& operator<<(ostream&,Nullable<V> const&) throw(runtime_error);

	template<typename V>
	friend istream& operator>>(istream&,Nullable<V> &);
};
}

#endif

 

 

#include "odbclib.h"

namespace odbclib
{
	Nullable<string> const& Nullable<string>::Null = Nullable<string>();
}
分享到:
评论

相关推荐

    java中使用@Nullable 注解的详细用法

    最近发现之前写的代码生成器(entity、dao、service、controller、vue) 有点bug,在Service层判断空的时候,少了一部分条件。所以补充上了,随后又同事问我在代码中发下了@Nullable注解不知道怎么用?脑子是个好...

    ios-LLXAlertPop.zip

    [self.view createAlertViewTitleArray:arrayTitle textColor:color font:[UIFont systemFontOfSize:16] actionBlock:^(UIButton * _Nullable button, NSInteger didRow) { //获取点击事件 NSLog(@"%@,%ld",...

    LuaFramework_UGUI_V2-master.zip

    支持值类型Nullable导出,包括Nullable等 支持Lua中function转委托,可以区分需要不同委托的参数的重载函数 支持c# LuaFunction对象转委托,简化调用方式。 支持无GC的多参数调用形式 支持重载函数自动折叠, 如:...

    C# 可空类型分析

    C#中的可空类型允许值类型变量能表示一个附加的null值,这为...同时,它们也增加了代码的健壮性,因为开发者可以明确地处理值类型的null情况,而不是依赖于某种语言级别的默认行为,这有助于提前发现并处理潜在的bug。

    Flask-SQLAlchemy-2.3.2.tar.gz

    在Flask-SQLAlchemy 2.3.2版本中,可能包含了一些新的特性和修复,例如性能优化、对新版本Flask和SQLAlchemy的兼容性改进,以及可能的bug修复。开发者可以查阅官方文档以获取更详细的更新日志和使用指南。 总的来说...

    Android自定义View圆形和拖动圆、跟随手指拖动效果

    在自定义View时,我们可能会遇到一些Bug,例如在xml文件中设置的自定义圆的宽和高是它能活动的空间的大小,而不是圆控件的大小。如果我们定义了100dp的宽和高,那么拖动圆超过100dp这个距离时,圆就会消失。解决这个...

    springframework.5.0.12.RELEASE

    MockMvcResultMatchers.forwardedUrl argument is not declared as nullable [SPR-17623] #22155 Cannot convert from Collection to RegularEnumSet [SPR-17619] #22151 TomcatHttpHandlerAdapter is not aware of ...

    csharp v1.0&1.2&2.0&3.0 specification 大集合

    此外,3.0版本还引入了扩展方法、自动实现的属性和匿名类型的一些增强,以及预处理器指令的改进,如`#region`和`#nullable`。 这些规范文档对于开发者来说是非常宝贵的资源,它们可以帮助你深入理解C#的每一个细节...

    PHP nts & ts x64 v7.1.1 便携版

    7.1.1作为7.1系列的早期版本,修复了一些bug并提供了更稳定的环境。 - 新特性包括:改进的类型声明,如`void`返回类型和`nullable`类型;新增`??`空合并运算符;以及对`finally`块的改进等。 3. **便携版优势** -...

    jar_files.zip内含jaxws-api-2.3.1.jar等jar包

    5. **javax.annotation-api-1.3.2.jar**:这个库包含了Java标准注解(Annotations),如`@Nullable`、`@NonNull`等,它们用于在代码中提供元数据,帮助编译器和工具进行静态分析,提高代码质量和可靠性。1.3.2版本...

    DART & Henson 3_ design document

    D&H2虽然运行良好且没有重大bug,但它不支持模块化的Android项目。因此,作为模块化要求的一部分(更清晰的设计、更快的构建时间和即时应用),对库进行了重大重新设计。模块化是导致两个主要问题的原因: 1. 不同...

    C#開發 好問題

    12. **C#新特性**:随着版本的更新,C#引入了许多新特性,如async streams、nullable reference types、pattern matching等,这些都值得开发者关注和学习。 以上只是C#开发中的一部分关键知识点,实际上还有更多如...

    理解 C#值类型与引用类型 (2).docx

    值类型包括结构体(struct)、基本数值类型(如int、float、bool等)、枚举(enum)和可空类型(nullable)。它们直接存储其值,当进行赋值操作时,会复制整个数据。值类型隐式继承自`System.ValueType`,并默认提供...

    LINQPad_Premium_5.36.03_Any_CPU 含破解

    When dumping a non-enumerable item to a grid, nullable bools no longer cause a formatting error. When displaying XML documentation summaries in autocompletion listings and tooltips, &lt;para&gt; tags are no...

    通过StartForResult传递数据,支持3个页面

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_2_TO_1) { if ...

    ios实现app强制更新功能

    NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSLog(@"%@", response); ...

    基于SSM的图书管理系统设计与实现

    此外,还需要确保所有页面能够正常跳转,没有明显的bug存在。 #### 八、总结与展望 通过本次实训,不仅深入学习了SSM框架的相关知识和技术,还掌握了从需求分析到系统实现的完整流程。未来将继续优化现有系统,...

    Kotlin学习参考笔记(先找到summary.md目录)

    - **Nullable与Non-Nullable类型**:Kotlin强制区分可空与非空类型,如`String?`表示可为空的字符串,`String`则不能为null。 - **智能转换**:非空类型可以隐式转换为可空类型,反之需要显式使用`!!`操作符。 - ...

    C#值类型和引用类型的深入理解

    理解这两者的区别对于编写高效、无bug的代码至关重要。 1. 通用类型系统(CTS) 通用类型系统是.NET Framework的核心组成部分,它定义了一套标准的数据类型,供所有.NET语言使用。CTS确保了跨语言的兼容性和类型安全...

    Plasmirror

    在Kotlin中,变量可以声明为非空(nonnull)或可空(nullable),这有助于避免因意外的null值而导致的运行时错误。 3. **函数与变量声明**:Kotlin的函数和变量声明简洁明了,如`fun functionName(args) { ... }`...

Global site tag (gtag.js) - Google Analytics