使用模板别名(类型别名,使用C ++ 11)弃用模板化的类名吗?

usr1234567

我想重命名模板化的类。为了使用户更容易过渡,我想将旧类保留一个新的版本,并使用GCC / Clang的扩展名(不推荐使用属性)将其标记为不推荐使用。为了避免保留不赞成使用的类的确切副本,使用模板别名将很方便。Unfortunatley它似乎不起作用。这是我尝试使用Clang 3.3,GCC 4.7和GCC 4.8进行的操作:

template <class blabla>
struct NewClassName
{
    // ...
};

template <class blabla> using OldClassName __attribute__ ((deprecated))
  = NewClassName<blabla>;

我会错过什么吗?还是编译器不支持?还有其他想法可以在不复制整个班级的情况下获得弃用警告吗?

usr1234567

从4.7版开始,GCC确实支持弃用的模板别名。这是一个比较typedef和模板别名的测试用例:

template <class T>
struct NewClassName
{
    // ...
};

template <class T> using OldClassNameUsing __attribute__ ((deprecated))
  = NewClassName<T>;

typedef NewClassName<int> OldClassNameTypedef __attribute__ ((deprecated));

int main()
{
  OldClassNameUsing<int> objectUsing;
  OldClassNameTypedef objectTypedef;

  return 0;
}

它对我不起作用的原因是,我没有创建OldClassNameUsing的对象,而是访问了诸如OldClassNameUsing :: myFunction()之类的静态成员。除非功能本身已被弃用,否则它绝不会触发弃用警告。

Clang尚不支持弃用模板别名-已通过SVN r194323的3.3和3.4版进行了测试。相应的功能请求是http://llvm.org/bugs/show_bug.cgi?id=17862
Clang在版本4中仍然不支持此功能。对于C ++-14的[[deprecated]]也是如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用模板别名(类型别名,使用C ++ 11)弃用模板化类名吗?

来自分类Dev

C ++ 11“使用”类型别名的默认模板参数

来自分类Dev

C ++ 11“使用”类型别名的默认模板参数

来自分类Dev

C ++模板元编程:使用类型别名与继承的不同行为

来自分类Dev

类型别名如何使用来指定依赖于模板参数的模板模板参数?

来自分类Dev

在模板基类列表中使用类本地类型别名

来自分类Dev

在模板基类列表中使用类本地类型别名

来自分类Dev

将模板类拆分为头文件和实现文件时使用类型别名

来自分类Dev

可以使用类型别名来定义类型别名吗?

来自分类Dev

TypeScript中可以使用通用类型别名吗?

来自分类Dev

我可以在C ++ 20的类型别名中使用条件吗?

来自分类Dev

类作用域的“使用”类型别名:[何时]方法中的用法何时可以优先于类型别名?

来自分类Dev

模板类类型别名在成员声明中替换失败

来自分类Dev

“模板模板参数的模板参数必须是类模板或类型别名模板”

来自分类Dev

“模板模板参数的模板参数必须是类模板或类型别名模板”

来自分类Dev

在模板上使用模板别名

来自分类Dev

为模板类使用别名

来自分类Dev

C ++模板别名(使用)在特定位置

来自分类Dev

typedef和C ++ 11类型别名之间的区别

来自分类Dev

typedef和C ++ 11类型别名之间的区别

来自分类Dev

避免在Scala类和同伴对象中使用重复的类型别名

来自分类Dev

“使用”类型别名指令在同一名称空间中不起作用

来自分类Dev

为什么允许使用类型别名作为变量名?

来自分类Dev

为什么不能在函数内部声明模板化类型别名?

来自分类Dev

类型别名在类中做什么?

来自分类Dev

类型别名在类中做什么?

来自分类Dev

@IBInspectable 为类设置类型别名

来自分类Dev

Bifunctors的参数化类型别名

来自分类Dev

如何为模板“ using”类型别名的流输出运算符<<提供重载?

Related 相关文章

  1. 1

    用模板别名(类型别名,使用C ++ 11)弃用模板化类名吗?

  2. 2

    C ++ 11“使用”类型别名的默认模板参数

  3. 3

    C ++ 11“使用”类型别名的默认模板参数

  4. 4

    C ++模板元编程:使用类型别名与继承的不同行为

  5. 5

    类型别名如何使用来指定依赖于模板参数的模板模板参数?

  6. 6

    在模板基类列表中使用类本地类型别名

  7. 7

    在模板基类列表中使用类本地类型别名

  8. 8

    将模板类拆分为头文件和实现文件时使用类型别名

  9. 9

    可以使用类型别名来定义类型别名吗?

  10. 10

    TypeScript中可以使用通用类型别名吗?

  11. 11

    我可以在C ++ 20的类型别名中使用条件吗?

  12. 12

    类作用域的“使用”类型别名:[何时]方法中的用法何时可以优先于类型别名?

  13. 13

    模板类类型别名在成员声明中替换失败

  14. 14

    “模板模板参数的模板参数必须是类模板或类型别名模板”

  15. 15

    “模板模板参数的模板参数必须是类模板或类型别名模板”

  16. 16

    在模板上使用模板别名

  17. 17

    为模板类使用别名

  18. 18

    C ++模板别名(使用)在特定位置

  19. 19

    typedef和C ++ 11类型别名之间的区别

  20. 20

    typedef和C ++ 11类型别名之间的区别

  21. 21

    避免在Scala类和同伴对象中使用重复的类型别名

  22. 22

    “使用”类型别名指令在同一名称空间中不起作用

  23. 23

    为什么允许使用类型别名作为变量名?

  24. 24

    为什么不能在函数内部声明模板化类型别名?

  25. 25

    类型别名在类中做什么?

  26. 26

    类型别名在类中做什么?

  27. 27

    @IBInspectable 为类设置类型别名

  28. 28

    Bifunctors的参数化类型别名

  29. 29

    如何为模板“ using”类型别名的流输出运算符<<提供重载?

热门标签

归档