2012-03-20 94 views
11

我们可以像我们在名称空间中那样使用类名吗?我们可以像我们在名称空间中那样使用类名吗?

例如:

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

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

'typedef'应该这样做,除非我误解? – 2012-03-20 16:50:24

回答

21

简单:

typedef LONGNAME LN; 

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

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

    WheelCollection wheels; 
}; 

通过使用Car::WheelCollection随处可见,而不是std::vector<Wheel>,你可以在一个地方改变容器类型,并有所有的代码反映这些变化。这是用于抽象数据类型的C++方法(例如,在C#中,您将拥有一个返回IEnumerable<Wheel>的属性)。

+0

当你发布这个答案而不是评论时,你应该表现出更多的礼貌来解释至少基础知识。 – 2012-03-21 05:04:53

+0

@Rohit:什么基础? Typedef是C++中最简单的语句,除了曾经看过它之外,没有什么可以知道的。 – 2012-03-21 07:29:24

+0

关于如何使用它的一点理论。或什么是typedef等将是很好的答案 – 2012-03-21 07:42:43

6

可以使用typedef关键字:

typedef LONGNAME LN; 

你也可以这样做:

typedef class { 

... 

} LN; 

编辑: 使用模板虽然时,您可能会遇到麻烦。有关可能的解决方案,请参见here

+1

提供的链接是无关的,因为它处理的是模板,而不是类,而这些是完全不同的野兽。 – 2012-03-20 18:39:07

+0

@DavidRodríguez-dribeas我只是认为OP在'typedef'模板类中也可能很有趣。 – ApprenticeHacker 2012-03-21 04:56:12

1
typedef int mark; // for in built data types 

class abc 
{ 
}; 

typedef abc XYZ; // for user written classes. 

Typedef允许您使用对应于场景的更多上下文相关名称来为类或数据类型名称生成别名。

6

除了已使用关键字typedef提供的答案外,您还可以使用自C++ 11以来的关键字using。恕我直言,它看起来更符合别名。

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

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

此外,using你是用alias templates能够别名模板类(How to typedef a template class?)。

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