我们可以像命名空间一样对类名进行别名吗?

时间:2012-03-20 16:48:43

标签: c++

我们可以像命名空间一样对类名进行别名吗?

例如:

namespace longname{ }
namespace ln = longname;// namespace aliasing

class LONGNAME {};
class LN = LONGNAME; // how to do class name aliasing, if allowed?

4 个答案:

答案 0 :(得分:25)

简单:

typedef LONGNAME LN;

在C ++中使用Typedef有点像“可以存储类型的变量”。例如:

class Car
{
public:
    typedef std::vector<Wheel> WheelCollection;

    WheelCollection wheels;
};

在任何地方使用Car::WheelCollection代替std::vector<Wheel>,您可以在一个位置更改容器类型,并让所有代码反映更改。这是抽象数据类型的C ++方法(例如,在C#中,你有一个返回IEnumerable<Wheel>的属性。)

答案 1 :(得分:13)

除了使用关键字typedef提供的答案之外,您还可以使用自C ++ 11以来的关键字using。恕我直言,它在别名方面看起来更加一致。

namespace longname{ }
namespace ln = longname;// namespace aliasing

class LONGNAME {};
using LN = LONGNAME; // "class aliasing"

此外,使用using,您可以使用How to typedef a template class?为模板类(alias templates)设置别名。

template<typename T> class LONGNAME {};
template<typename T> using LN = LONGNAME<T>; // alias template

答案 2 :(得分:6)

您可以使用typedef关键字:

typedef LONGNAME LN;

您还可以执行以下操作:

typedef class {

...

} LN;

修改 但是在使用模板时可能会遇到麻烦。有关可能的解决方案,请参阅here

答案 3 :(得分:1)

typedef int mark;  // for in built data types

class abc
{
};

typedef abc XYZ; // for user written classes.

Typedef允许您使用与场景对应的更多上下文敏感名称为类或数据类型名称添加别名。