Макросы указателя не работают - PullRequest
0 голосов
/ 28 апреля 2020

Я делаю систему регистрации для двигателя, который я собираю, и столкнулся с проблемой. Я настроил несколько макросов для своего движка, но, к сожалению, они не работают. Вот мой код: Log. cpp

#include "Log.h"
#include "spdlog/sinks/stdout_color_sinks.h"

namespace Divided
{
    std::shared_ptr<spdlog::logger> Log::s_CoreLogger;
    std::shared_ptr<spdlog::logger> Log::s_ClientLogger;

    void Log::Init()
    {
        spdlog::set_pattern("%^[%T] %n: %v%$");
        s_CoreLogger = spdlog::stdout_color_mt("DIVIDED");
        s_CoreLogger->set_level(spdlog::level::trace);
        s_ClientLogger = spdlog::stdout_color_mt("APP");
        s_ClientLogger->set_level(spdlog::level::trace);
    }
}

Log.h

#pragma once
#include <memory>
#include "Core.h"
#include "spdlog/spdlog.h"

namespace Divided
{
    class DIVIDED_API Log
    {
    public:
        static void Init();

        inline static std::shared_ptr<spdlog::logger>& GetCoreLogger() { return s_CoreLogger; }
        inline static std::shared_ptr<spdlog::logger>& GetClientLogger() { return s_ClientLogger; }
    private:
        static std::shared_ptr<spdlog::logger> s_CoreLogger;
        static std::shared_ptr<spdlog::logger> s_ClientLogger;
    };
}

//core logging macros
#define DV_CORE_FATAL(...) ::Divided::Log::GetCoreLogger->fatal(__VA_ARGS__)
#define DV_CORE_ERROR(...) ::Divided::Log::GetCoreLogger->error(__VA_ARGS__)
#define DV_CORE_WARN(...)  ::Divided::Log::GetCoreLogger->warn(__VA_ARGS__)
#define DV_CORE_INFO(...)  ::Divided::Log::GetCoreLogger->info(__VA_ARGS__)
#define DV_CORE_TRACE(...) ::Divided::Log::GetCoreLogger->trace(__VA_ARGS__)
                           ::
//client logging macros    ::
#define DV_FATAL(...)      ::Divided::Log::GetClientLogger->fatal(__VA_ARGS__)
#define DV_ERROR(...)      ::Divided::Log::GetClientLogger->error(__VA_ARGS__)
#define DV_WARN(...)       ::Divided::Log::GetClientLogger->warn(__VA_ARGS__)
#define DV_INFO(...)       ::Divided::Log::GetClientLogger->info(__VA_ARGS__)
#define DV_TRACE(...)      ::Divided::Log::GetClientLogger->trace(__VA_ARGS__)

и core.h

#pragma once

#ifdef DV_PLATFORM_WINDOWS
    #ifdef DV_BUILD_DLL
        #define DIVIDED_API __declspec(dllexport)
    #else
        #define DIVIDED_API __declspec(dllimport)
    #endif
#else
    #error DIVIDED ONLY SUPPORTS WINDOWS!
#endif

, когда я звоню любому из macros visual studio говорит, что слева от -> должен указываться тип данных. Кто-нибудь знает, почему это тормозит

1 Ответ

0 голосов
/ 29 апреля 2020

решение здесь действительно тривиально. способ определения макросов теперь будет указателем на функцию, которая пытается вызвать то, что должно быть функцией-членом. это, очевидно, не будет работать. что нужно сделать, это добавить круглые скобки в конец каждого вызова GetClientLogger и GetCoreLogger, чтобы возвращаемый тип этих функций - классов - вызывал их правильные и существующие функции-члены.

...