【发布时间】:2014-02-03 22:55:24
【问题描述】:
我的班级使用 PImpl 习语,看起来像这样:
// In LongDescriptiveClassName.hpp
class LongDescriptiveClassName
{
public:
// Stuff...
private:
struct LongDescriptiveClassNameData;
LongDescriptiveClassNameData &Data;
};
在 .cpp 文件中,我声明/定义私有结构:
// In LongDescriptiveClassName.cpp
struct LongDescriptiveClassName::LongDescriptiveClassNameData
{
void PrivateMethod1();
void PrivateMethod2();
// and so on...
};
void LongDescriptiveClassName::LongDescriptiveClassNameData::PrivateMethod1()
{
// Stuff...
}
void LongDescriptiveClassName::LongDescriptiveClassNameData::PrivateMethod2()
{
// Stuff...
}
这让我读起来很痛苦。 有没有办法可以缩写导致私有方法的名称?
我的理解是我不能在 .cpp 文件中 typedef 它,因为 PImpl 结构是私有的。使用#define会不会是一种邪恶?
#define ShortName LongDescriptiveClassName::LongDescriptiveClassNameData
struct ShortName
{
// ...
};
void ShortName::PrivateMethod1()
// ...
这个 .cpp 文件是唯一需要缩写它的源文件,并且仅用于方法定义。你有什么推荐的?
【问题讨论】:
-
不要使用
LongDescriptiveClassNameData,而是使用ShortNameData。矮得多。如果您担心冲突,为什么不使用命名空间
标签: c++ class typedef private c-preprocessor