【问题标题】:C++ multiple definitions of 'using' alias'使用'别名的C ++多个定义
【发布时间】:2016-09-28 16:59:51
【问题描述】:

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

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

例子:

“公共”标题:

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

“私有”实现文件:

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

只要两者都使用别名 alias 同样的东西,这样合法吗?这个简单的例子在 MSVC 14 中对我有用,但是当我尝试以同样的方式使用更复杂的别名时,编译器会报错。

【问题讨论】:

  • 您能否提供一个“更复杂的别名”的示例以及您的编译器提供的确切投诉?
  • 请提供实际问题代码的minimal reproducible example

标签: c++ templates using


【解决方案1】:

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

是的,这是合法的。

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

【讨论】:

  • 所以我只要只在命名空间范围内使用就可以了?
猜你喜欢
  • 1970-01-01
  • 2019-01-21
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2022-11-27
  • 2019-11-01
  • 1970-01-01
相关资源
最近更新 更多