有没有办法用#define替换长命名空间?

Mar*_*nix 3 c++ macros namespaces

假设我有一个非常长的命名空间,我不想一直输入.但我也不想使用它们using namespace ....我可以使用#define吗?

例:

#define glm::quat glm::gtc::quaternion

class Camera
{
protected:
    glm::quat m_mRotation;
};
Run Code Online (Sandbox Code Playgroud)

我不想使用这个,因为glm :: part也会消失.所以我想保留glm部分,但不是完全长的gtc :: quaternion部分.当我现在尝试这个时,我收到以下错误:

错误1错误C2008:':':宏定义中出现意外

DaV*_*nci 13

您不需要定义,使用命名空间别名:

namespace glm_quat = glm::gtc::quaternion::quat;
Run Code Online (Sandbox Code Playgroud)

或者如果你想让别名真的在glm命名空间中,那就把它放在那里:

namespace glm {
  namespace quat = gtc::quaternion::quat;
}
Run Code Online (Sandbox Code Playgroud)