假设我有一个非常长的命名空间,我不想一直输入。但我也不想使用using namespace ...
。我可以使用#define吗?
示例:
#define glm::quat glm::gtc::quaternion
class Camera
{
protected:
glm::quat m_mRotation;
};
我不想使用use,因为glm :: part也会消失,我想。所以我想保留glm部分,但不是完全长的gtc :: quaternion部分。当我现在尝试这个时,我收到以下错误:
错误1错误C2008:':':宏定义中出现意外
答案 0 :(得分:13)
您不需要定义,使用命名空间别名:
namespace glm_quat = glm::gtc::quaternion::quat;
或者如果你想让别名真的在glm命名空间中,请把它放在那里:
namespace glm {
namespace quat = gtc::quaternion::quat;
}
答案 1 :(得分:2)
您无法使用#DEFINE左侧的“:”字符(“名称”部分)。但它允许在右侧(“价值”)
所以,试试这个:
#define GLM_QUAT glm::gtc::quaternion::quat
class Camera
{
protected:
GLM_QUAT m_mRotation;
};
请记住,#DEFINE只是一个预编译宏,采用“名称值”对形式。左侧部分与变量名称具有相同的规则,右侧可以是任何内容。它只是编译器在进行任何编译/ sintax检查之前替换的文本。
顺便说一下,我强烈建议您在#DEFINE名称中使用UPPER_CAPS,这样您就可以在代码中轻松发现它们,这样可以避免在调试代码时产生很多混淆。你不想把它误读为变量或类型。大写有助于让你清楚它是一个宏。