C ++使用'的多个定义别名

时间:2016-09-28 16:59:52

标签: c++ templates using

在C ++中多次声明相同的using别名是否合法?我有一个模板库,其中一个头文件用作' public' - 它包含所有模板类声明和别名,然后'实现'文件(不是字面意义上的,它们包含模板类的定义)。公共头文件包含所有实现头文件。

不可能在实现文件中包含公共头,因为这会导致循环依赖。但是,我想在实现文件中使用头文件中声明的模板别名。

示例:

'公共'头:

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

&#39;私人&#39;实施文件:

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

只要两个使用别名别名相同,这是合法的吗?这个简单的例子在MSVC 14中对我有用,但当我尝试以相同的方式使用更复杂的别名时,编译器抱怨。

1 个答案:

答案 0 :(得分:4)

  

在C ++中使用别名多次声明相同是否合法?

是的,这是合法的。

使用using ... = ...;语法的 alias-declaration 是声明typedef的更有效方式。因此,只要它们不将别名声明为不同的类型,就可以毫无问题地重复它。