如何为单例函数创建别名? 我想在C++中为单调用调用别名。 因此,不要调用MYCLASS::GetInstance()->someFunction()someFunction()不使用单例可以避免很多无意义的问题。我更新了你的问题,让它讨论别名而不是typedef;typedef关键字专门用于类型。您缺少一个返回类型。将其作为内联函数可以节省可执行文件中的代码大小。@Johannes:编译器不是忽略了inline语句吗?使用inline的唯一缺点是它会降低API的灵活性。如果您总是能够在更改API时重建代码的调用方,那就没什么大不了的了。但是,如果您试图维护一个稳定的API,以便调用方不需要每次都更新(例如,因为它是库的公共接口),那么最好不要在该接口中使用inline。(我很后悔在C、FWIW中对#define做了同样的事情。事实上,这是同一个问题,但细节不同。)@Donal这不仅适用于内联关键字,而且适用于代码对调用方可见的任何函数。当您使用static并将该函数定义放入标题中时,也会出现同样的问题。当将内联而不是静态放入时,唯一保证可观察到的差异是,函数的行外代码不会在导致其发出的每个翻译单元中重复(以其地址为例)。函数指针的想法可能不起作用,因为从外观上看,someFunction是一个非静态成员函数。当我意识到这是个陷阱时,我已经想到了推荐函数引用。我同意C++中的一个宏是无可否认的。在某些情况下,它的使用是合理的,我觉得这就是其中之一。这里没有涉及任何类型,OP只需要一个别名来保证代码的可读性。以下链接显示了SO社区接受它的地方,

如何为单例函数创建别名? 我想在C++中为单调用调用别名。 因此,不要调用MYCLASS::GetInstance()->someFunction()someFunction()不使用单例可以避免很多无意义的问题。我更新了你的问题,让它讨论别名而不是typedef;typedef关键字专门用于类型。您缺少一个返回类型。将其作为内联函数可以节省可执行文件中的代码大小。@Johannes:编译器不是忽略了inline语句吗?使用inline的唯一缺点是它会降低API的灵活性。如果您总是能够在更改API时重建代码的调用方,那就没什么大不了的了。但是,如果您试图维护一个稳定的API,以便调用方不需要每次都更新(例如,因为它是库的公共接口),那么最好不要在该接口中使用inline。(我很后悔在C、FWIW中对#define做了同样的事情。事实上,这是同一个问题,但细节不同。)@Donal这不仅适用于内联关键字,而且适用于代码对调用方可见的任何函数。当您使用static并将该函数定义放入标题中时,也会出现同样的问题。当将内联而不是静态放入时,唯一保证可观察到的差异是,函数的行外代码不会在导致其发出的每个翻译单元中重复(以其地址为例)。函数指针的想法可能不起作用,因为从外观上看,someFunction是一个非静态成员函数。当我意识到这是个陷阱时,我已经想到了推荐函数引用。我同意C++中的一个宏是无可否认的。在某些情况下,它的使用是合理的,我觉得这就是其中之一。这里没有涉及任何类型,OP只需要一个别名来保证代码的可读性。以下链接显示了SO社区接受它的地方,,c++,singleton,alias,C++,Singleton,Alias,使用静态函数 namespace ... { void someFunction() { MYCLASS::GetInstance()->someFunction(); } }; 编辑:对不起,伙计们,我写的是静态someFunction,意思是void someFunction。typedef用于类型别名,但不能用作调用别名 函数(如DeadMG建议的)可以用作调用“别名” PS。由于这是C++,您有很多选项,函数指针,STD::Tr1::函数操作符重

使用静态函数

namespace ... {
    void someFunction() {
        MYCLASS::GetInstance()->someFunction();
    }
};

编辑:对不起,伙计们,我写的是静态someFunction,意思是void someFunction。

typedef用于类型别名,但不能用作调用别名

函数(如DeadMG建议的)可以用作调用“别名”


PS。由于这是C++,您有很多选项,函数指针,STD::Tr1::函数操作符重载和预处理器。但是在这种情况下,看起来一个简单的函数将是最简单和最好的解决方案。

查找函数指针

您可以创建函数指针,并将其分配给长函数。然后,无论变量定义在哪里,都可以像调用常规函数一样调用此函数指针

函数指针可能会让人困惑,但在API回调中使用得很多(即,将函数作为参数传递给API,API会在出现问题时调用该函数(想想WndProc))

祝你好运。

你能做到
#将somefunctionas定义为MYCLASS::GetInstance()->someFunction()

不使用单例可以避免很多无意义的问题。我更新了你的问题,让它讨论别名而不是typedef;
typedef
关键字专门用于类型。您缺少一个返回类型。将其作为内联函数可以节省可执行文件中的代码大小。@Johannes:编译器不是忽略了
inline
语句吗?使用
inline
的唯一缺点是它会降低API的灵活性。如果您总是能够在更改API时重建代码的调用方,那就没什么大不了的了。但是,如果您试图维护一个稳定的API,以便调用方不需要每次都更新(例如,因为它是库的公共接口),那么最好不要在该接口中使用
inline
。(我很后悔在C、FWIW中对
#define
做了同样的事情。事实上,这是同一个问题,但细节不同。)@Donal这不仅适用于
内联
关键字,而且适用于代码对调用方可见的任何函数。当您使用
static
并将该函数定义放入标题中时,也会出现同样的问题。当将
内联
而不是
静态
放入时,唯一保证可观察到的差异是,函数的行外代码不会在导致其发出的每个翻译单元中重复(以其地址为例)。函数指针的想法可能不起作用,因为从外观上看,
someFunction
是一个非静态成员函数。当我意识到这是个陷阱时,我已经想到了推荐函数引用。我同意C++中的一个宏是无可否认的。在某些情况下,它的使用是合理的,我觉得这就是其中之一。这里没有涉及任何类型,OP只需要一个别名来保证代码的可读性。以下链接显示了SO社区接受它的地方,