我正在为我的一个项目创建一个帮助程序命名空间,我希望它能够使用所有类型,如整数,浮点数,双精度等。但似乎我不能正确地模板化。
无论如何,这是我当前的代码,我的编译器没有吐出有关文件本身的错误,但是当我编译它时,它会在其他文件中吐出数百个错误。 当我删除文件中的模板时,这些错误不存在:
#include "..\util\Logger.hpp"
namespace gm
{
namespace math
{
namespace MathHelper
{
// Value of Pi
const double PI = 3.1415926535897932384626433832795028841972;
// Value of euler
const double E = 2.7182818284590452353602874713526624977572;
// Convert radians to degrees
template <typename T>
T Rad2Deg(T angle)
{
return angle * (180 / (T)PI);
}
// Convert degrees to radians
template <typename T>
T Deg2Rad(T angle)
{
return angle * ((T)PI / 180);
}
// Clamp a value in between the given min and max
template <typename T>
T Clamp(T value, T min, T max)
{
if(min > max) { gm::util::Logger::DisplayError("Invalid argument in MathHelper::Clamp, max is over min"); }
if(value < min) { value = min; }
if(value > max) { value = max; }
return value;
}
// Exponentiate value a with value b
template <typename T>
T Exp(T a, int b)
{
if(b < 0) { gm::util::Logger::DisplayError("Invalid argument in MathHelper::Exp, b must be positive"); }
T value = a;
for(int i = 1; i < b; i++) { value *= a; }
return value;
}
// Get the absolute value of the value passed
template <typename T>
T Abs(T a, T b)
{
if(value < 0) { value = -value;
return value;
}
};
};
};
我将编译错误放在此粘贴中:http://pastebin.com/AxwmDyDh
答案 0 :(得分:2)
如果您为int
传入T
,则您的deg / rad转换功能无法正常工作,因为PI会在转换前被截断为int。我无法弄清楚为什么你有那个。
如果min
位于任何地方,使用max
和using namespace
等变量名称会导致问题。
abs
}
功能在if
上缺少结束{{1}}。这可能会导致呼叫点出错。
答案 1 :(得分:1)
if
错过了大括号。
if(value < 0) { value = -value;