c_cpp C ++属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp C ++属性相关的知识,希望对你有一定的参考价值。

template<typename T, typename P, void (P::*set_handler)(T data), T (P::*get_handler)()> class property
{
private:
	P &parent;

public:
	property(P &parent) : parent(parent) { }

	void operator=(T data)
	{
		(parent.*set_handler)(data);
	}

	operator T()
	{
		return (parent.*get_handler)();
	}
};

template<typename T, typename P, T (P::*get_handler)()> class property_get
{
private:
	T &data;
	P &parent;

public:
	property_get(P &parent, T &data) : parent(parent), data(data) { }

	void operator=(T data)
	{
		this->data = data;
	}

	operator T()
	{
		return (parent.*get_handler)();
	}
};

template<typename T, typename P, T (P::*get_handler)()> class property_only_get
{
private:
	P &parent;

public:
	property_only_get(P &parent) : parent(parent) { }

	operator T()
	{
		return (parent.*get_handler)();
	}
};

template<typename T, typename P, void (P::*set_handler)(T data)> class property_set
{
private:
	T &data;
	P &parent;

public:
	property_set(P &parent, T &data) : parent(parent), data(data) { }

	void operator=(T data)
	{
		(parent.*set_handler)(data);
	}

	operator T()
	{
		return data;
	}
};

class my_class
{
private:
	unsigned int m_int;

	void on_set(unsigned int data)
	{
		m_int = data - 1;
	}

	unsigned int on_get()
	{
		return m_int * m_int;
	}

public:
	property<unsigned int, my_class,  &my_class::on_set, &my_class::on_get> my_int;

	my_class() : my_int(*this) { }
};

unsigned int __cdecl main()
{
	//my_class mc;

	//unsigned int tmp;
	//mc.my_int = tmp;
	//return mc.my_int;
	int acc;
	return acc > 0;
}

以上是关于c_cpp C ++属性的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 使用OpInput从其他输入获取属性

c_cpp 将根TF1转换为xml属性字符串

c_cpp 进度条的一个漂亮的小可自定义视图,具有可选的动画属性

C/C++实现Perigram属性

VS里的VC++属性和C/C++属性有什么区别?

C/C++ HDF5 读取字符串属性