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

Jat*_*tin 15 c++

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

例如:

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

class LONGNAME {};
class LN = LONGNAME; // how to do class name aliasing, if allowed?
Run Code Online (Sandbox Code Playgroud)

Ale*_* C. 26

简单:

typedef LONGNAME LN;
Run Code Online (Sandbox Code Playgroud)

Typedef在C++中使用有点像"可以存储类型的变量".例:

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

    WheelCollection wheels;
};
Run Code Online (Sandbox Code Playgroud)

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


use*_*087 13

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

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

class LONGNAME {};
using LN = LONGNAME; // "class aliasing"
Run Code Online (Sandbox Code Playgroud)

此外,using你可以别名模板类(如何的typedef模板类?通过使用)别名模板.

template<typename T> class LONGNAME {};
template<typename T> using LN = LONGNAME<T>; // alias template
Run Code Online (Sandbox Code Playgroud)

  • 《有效的现代 C++》2014,S. Meyers,第 9 条 (2认同)

App*_*ker 6

您可以使用typedef关键字:

typedef LONGNAME LN;
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

typedef class {

...

} LN;
Run Code Online (Sandbox Code Playgroud)

编辑: 虽然使用模板可能会遇到麻烦.请参阅此处了解可能的解决方案