'using' 别名的 C++ 多重定义
C++ multiple definitions of 'using' alias
在 C++ 中多次声明相同的 using
别名是否合法?我有一个模板库,其中一个 header 文件用作 'public' - 它包含所有模板 class 声明和别名,然后是 'implementation' 文件(不是字面意义上的,这些包含模板 classes 的定义)。 Public header 文件在其末尾包含所有实现 header。
无法从实现文件中包含 public header,因为那样会导致循环依赖。但是,我想使用在实现文件中的 header 文件中声明的模板别名。
示例:
'public' header:
using true_type = logical_constant<true>;
using false_type = logical_constant<false>;
'private' 实施文件:
using true_type = logical_constant<true>;
using false_type = logical_constant<false>;
只要两者都使用别名别名是一样的,这合法吗?这个简单的示例在 MSVC 14 中对我有用,但是当我尝试以同样的方式使用更复杂的别名时,编译器会报错。
Is it legal in C++ to declare same using alias multiple times?
是的,这是合法的。
使用 using ... = ...;
语法的 别名声明 是声明 typedef
的一种更奇特的方式。因此,只要他们不将别名声明为不同类型,就可以毫无问题地重复它。
在 C++ 中多次声明相同的 using
别名是否合法?我有一个模板库,其中一个 header 文件用作 'public' - 它包含所有模板 class 声明和别名,然后是 'implementation' 文件(不是字面意义上的,这些包含模板 classes 的定义)。 Public header 文件在其末尾包含所有实现 header。
无法从实现文件中包含 public header,因为那样会导致循环依赖。但是,我想使用在实现文件中的 header 文件中声明的模板别名。
示例:
'public' header:
using true_type = logical_constant<true>;
using false_type = logical_constant<false>;
'private' 实施文件:
using true_type = logical_constant<true>;
using false_type = logical_constant<false>;
只要两者都使用别名别名是一样的,这合法吗?这个简单的示例在 MSVC 14 中对我有用,但是当我尝试以同样的方式使用更复杂的别名时,编译器会报错。
Is it legal in C++ to declare same using alias multiple times?
是的,这是合法的。
使用 using ... = ...;
语法的 别名声明 是声明 typedef
的一种更奇特的方式。因此,只要他们不将别名声明为不同类型,就可以毫无问题地重复它。