c_cpp C ++ TMP测量单位POC

Posted

tags:

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

#include "stdafx.h"

class m { };
class kg { };
class s { };

template<typename T, int pm, int pkg, int ps>
class unit
{
public:
	T value;

	unit(T value) : value(value)
	{
	}
};

template<typename T, int pm, int pkg, int ps>
unit<T, pm, pkg, ps> operator+(const unit<T, pm, pkg, ps> &x, const unit<T, pm, pkg, ps> &y)
{
	return unit<T, pm, pkg, ps>(x.value + y.value);
}

template<typename T, int pm, int pkg, int ps>
unit<T, pm, pkg, ps> operator-(const unit<T, pm, pkg, ps> &x, const unit<T, pm, pkg, ps> &y)
{
	return unit<T, pm, pkg, ps>(x.value - y.value);
}

template<typename T, int pmx, int pkgx, int psx, int pmy, int pkgy, int psy>
unit<T, pmx + pmy, pkgx + pkgy, psx + psy> operator*(const unit<T, pmx, pkgx, psx> &x, const unit<T, pmy, pkgy, psy> &y)
{
	return unit<T, pmx + pmy, pkgx + pkgy, psx + psy>(x.value * y.value);
}

template<typename T, int pmx, int pkgx, int psx, int pmy, int pkgy, int psy>
unit<T, pmx - pmy, pkgx - pkgy, psx - psy> operator/(const unit<T, pmx, pkgx, psx> &x, const unit<T, pmy, pkgy, psy> &y)
{
	return unit<T, pmx - pmy, pkgx - pkgy, psx - psy>(x.value / y.value);
}

int _tmain()
{
	auto foo = unit<float, 1, 0, 0>(5) + unit<float, 1, 0, 0>(10);
	printf("%f\n", foo.value);
	auto bar = unit<float, 0, 0, 1>(2) * unit<float, 0, 0, 1>(3) + unit<float, 0, 0, 2>(4);
	printf("%f\n", bar.value);
}

以上是关于c_cpp C ++ TMP测量单位POC的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 用于测量性能的C ++ Timer

c_cpp 测量实验室终极

c_cpp C ++ TMP图灵机

c_cpp 以C为单位获取当前时间,以微秒为单位。

在 Qt/C++ 应用程序中管理测量单位转换的最佳实践

c_cpp 以位为单位显示十六进制;与掩码一起使用按位AND。