Templating выбрасывает много ошибок - PullRequest
0 голосов
/ 25 мая 2011

Я создаю пространство имен помощников для одного из моих проектов, я хотел, чтобы он мог использовать все типы, такие как целые числа, числа с плавающей запятой, двойные числа и т. Д. Но, похоже, я просто не могу правильно выбрать шаблон.

В любом случае, вот мой текущий код, мой компилятор не выдает ошибки о самом файле, хотя, когда я компилирую его, он выдает сотни ошибок в других файлах.Эти ошибки отсутствуют при удалении шаблонов в файле:

#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

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Ваши функции преобразования в град / рад не будут работать правильно, если вы передадите int для T, потому что PI будет усечен до int перед выполнением преобразования.Я не могу понять, почему у вас это есть.

Использование имен переменных, таких как min и max, вызовет проблемы, если у вас есть using namespace где-нибудь.

ВашВ функции abs отсутствует закрывающая } на if.Это может привести к ошибкам в точке вызова.

1 голос
/ 25 мая 2011

В if пропущена фигурная скобка.

if(value < 0) { value = -value;  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...