2016-09-28 64 views
3

在C++中多次聲明相同的using別名是否合法?我有一個模板庫,其中一個頭文件用作'public' - 它包含所有的模板類聲明和別名,然後是'實現'文件(不是字面意義上的,它們包含模板類的定義)。公共頭文件包含所有實現頭文件。「使用」別名的C++多重定義

從實現文件中包含公共頭文件是不可能的,因爲這會導致循環依賴。不過,我想使用實現文件中的頭文件中聲明的模板別名。

例子:

'公' 頭:

using true_type = logical_constant<true>; 
using false_type = logical_constant<false>; 

'私人' 的實施文件:

using true_type = logical_constant<true>; 
using false_type = logical_constant<false>; 

只要雙方使用別名別名同樣的事情,這是合法的嗎?這個簡單的例子在MSVC 14中適用於我,但是當我試圖以相同的方式使用更復雜的別名時,編譯器抱怨道。

+0

你能否提供一個「更復雜的別名」和你的編譯器提供的確切投訴的例子? – kdelaney

+0

請提供[mcve]的實際問題代碼。 – Barry

回答

4

在C++中使用別名多次聲明相同的代碼是否合法?

是的,這是合法的。

一個別名聲明using ... = ...;語法是一個更奇特的方式來聲明typedef。因此,只要不聲明別名是不同的類型,就可以重複使用,不會有任何問題。

+0

所以只要我在命名空間範圍內使用它,它應該可以嗎? –