2012-03-20 100 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 
相關問題