首页 > 解决方案 > 在类中使用 typedef 覆盖现有类型

问题描述

我想用 typedef 覆盖一个类型。这样做的理由是我的一个类有很多模板,我想用模板化类替换对该类的所有调用(这样在另一个类Achild中意味着Achild<T>. 但是,我得到一个错误。

template <typename T>
   class Achild
   {
   public:
     Achild<T>() = default;


   };

  class Foo
{
        typedef Achild<int> Achild;
        public:
                Foo() = default;

};

int main()
{
        auto foo = new Foo();
}

我收到以下错误:

new_test.cpp:12:22: error: declaration of ‘typedef class Achild<int> Foo::Achild’ [-fpermissive]
  typedef Achild<int> Achild;
                      ^~~~~~
new_test.cpp:2:10: error: changes meaning of ‘Achild’ from ‘class Achild<int>’ [-fpermissive]
    class Achild

我怎样才能让它工作?该示例仅用于示例,我这样做的原因也与我必须如何使其与现有代码库一起使用有关。

标签: c++

解决方案


您正在使用自己的类型来别名(Achild自从您在类中声明它以来已经是一个类型)。你应该这样做:

using Child = Achild<int>;

请注意,您还应该使用关键字using而不是,typedef因为它在C++. 请参阅C++11 中的“typedef”和“使用”有什么区别?.


推荐阅读