我有这个单身" 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
答案 0 :(得分:1)
typedef
允许您为类型创建别名。您不能使用它来命名该类型的实例。
您可以获得的最接近的功能是将TextureHandler::getInstance()
的结果存储在指针中:
TextureHandler* TxHandler = TextureHandler::getInstance();
....
TxHandler->functionName();
答案 1 :(得分:0)
正如juanchopanza在评论中所说,typedef
声明了一个类型的别名。它不是一般宏观。
如果您不想重复输入TextureHandler::getInstance()
,可以使用宏:
#define TxHandler TextureHandler::getInstance()
但它只是语法糖,编译器将生成完全相同的代码。