Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以像在名称空间中那样给类名加别名吗?_C++ - Fatal编程技术网

C++ 我们可以像在名称空间中那样给类名加别名吗?

C++ 我们可以像在名称空间中那样给类名加别名吗?,c++,C++,我们可以像在名称空间中那样给类名加别名吗 例如: namespace longname{ } namespace ln = longname;// namespace aliasing class LONGNAME {}; class LN = LONGNAME; // how to do class name aliasing, if allowed? 简单: typedef LONGNAME LN; Type DEFS在C++中使用,如“可以存储类型的变量”。例如: class Car

我们可以像在名称空间中那样给类名加别名吗

例如:

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

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

typedef LONGNAME LN;

Type DEFS在C++中使用,如“可以存储类型的变量”。例如:

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

    WheelCollection wheels;
};
等级车
{
公众:
typedef std::向量收集;
收集轮;
};
通过在任何地方使用
Car::WheelCollection
而不是
std::vector
,您可以在一个地方更改容器类型,并让所有代码反映更改。这是C++抽象数据类型的方法(而在C语言中,你将返回一个属性<代码> iQueabd)。 您还可以执行以下操作:

typedef class {

...

} LN;
编辑: 不过,在使用模板时,您可能会遇到麻烦。有关可能的解决方案,请参阅

typedef int mark;  // for in built data types

class abc
{
};

typedef abc XYZ; // for user written classes.

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

除了已经使用关键字
typedef
提供的答案之外,您还可以使用关键字
使用
,因为C++11。IMHO在别名方面看起来更加一致

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

class LONGNAME {};
using LN = LONGNAME; // "class aliasing"
此外,使用
using
,您可以通过使用来别名模板类()

模板类LONGNAME{};
使用LN=LONGNAME;//的模板别名模板

typedef
应该这样做,除非我有误解?提供的链接是无关的,因为它处理的是模板,而不是类,这些都是完全不同的野兽。@DavidRodríguez dribeas我只是觉得OP在
typedef
ing模板类中可能也很有趣。当你把它作为一个答案而不是评论发布时,你应该表现出一点礼貌,至少解释一下基本知识。@Rohit:什么基本知识?Typedef是C++最简单的语句,除了看过一次以外,没有什么可知道的。或者什么是typedef,等等就好了answer@Rohit我添加了一个典型的用例。有效的现代C++ 2014,S. Meyers,项目9
namespace longname{ }
namespace ln = longname;// namespace aliasing

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