C ++,Typedef一个静态getInstance函数

时间:2015-01-27 15:54:41

标签: c++ oop design-patterns

我有这个单身" TextureHandler"使用此" TextureHandler :: getInstance() - > functionName()" ,可以正常工作的类,但是...我想要做的是创建一个typedef " TxHandler" 用于 getInstance()功能,所以我可以像这样使用" TxHandler-> functionName()&#34 ; ,但我收到此错误:在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

2 个答案:

答案 0 :(得分:1)

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

您可以获得的最接近的功能是将TextureHandler::getInstance()的结果存储在指针中:

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

答案 1 :(得分:0)

正如juanchopanza在评论中所说,typedef声明了一个类型的别名。它不是一般宏观。

如果您不想重复输入TextureHandler::getInstance(),可以使用宏:

#define TxHandler TextureHandler::getInstance()

但它只是语法糖,编译器将生成完全相同的代码。