我有这个单例的“TextureHandler”类,可以使用此“TextureHandler::getInstance()-> functionName()” 正常工作,但是...我想做的是为制作一个typedef “TxHandler” getInstance()函数,因此我可以像“TxHandler-> functionName()” 一样使用它,但是我遇到了这个错误:是'TxHandler'之前的预期初始化器。

#ifndef TEXTUREHANDLER_H
#define TEXTUREHANDLER_H

#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include <iostream>
#include <string>
#include <map>
#include "Defs.h"

// Engine's texture handler class
class TextureHandler
{
    // private constructor for singleton
    TextureHandler() {}
    static TextureHandler* instance;

    // textures string map
    map<string, SDL_Texture*> tMap;

    public:
        // getInstance singleton function
        static inline TextureHandler* getInstance()
        {
            if(instance == NULL)
            {
                // create a pointer to the object
                instance = new TextureHandler();
                return instance;
            }
            return instance;
        }

        bool load(SDL_Renderer* renderer, string id, const char* filename);
        bool loadText(SDL_Renderer* renderer, string id, const char* text, TTF_Font* font, SDL_Color color);
        void render(SDL_Renderer* renderer, string id, int x, int y, int w=0, int h=0, int center=0, SDL_Rect* clip=NULL, SDL_RendererFlip flip=SDL_FLIP_NONE);
        void free(string id);
        int getWidth(string id);
        int getHeight(string id);
};

// TextureHandler instance typedef
typedef TextureHandler::getInstance() TxHandler;

#endif

最佳答案

typedef允许您为类型创建别名。您不能使用它来命名该类型的实例。

与所追求的功能最接近的是将TextureHandler::getInstance()的结果存储在指针中:

TextureHandler* TxHandler = TextureHandler::getInstance();
....
TxHandler->functionName();

关于c++ - C++,Typedef一个静态的getInstance函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28174586/

10-10 10:49