代码之家  ›  专栏  ›  技术社区  ›  Martin Heralecký

两个模板类的方法相互调用

  •  0
  • Martin Heralecký  · 技术社区  · 7 年前

    两个模板类有两个方法,每个方法调用另一个类的方法:

    // Foo.h
    template<typename T>
    class Foo {
    public:
        static void call_bar() {
            Bar<int>::method();
        }
    
        static void method() {
            // some code
        }
    };
    
    // Bar.h
    template<typename T>
    class Bar {
    public:
        static void call_foo() {
            Foo<int>::method();
        }
    
        static void method() {
            // some code
        }
    };
    

    我怎样才能让它工作?简单地添加 #include "Bar.h" to foo.h(反之亦然)不起作用,因为每个类都需要另一个类。

    编辑:我也尝试过转发声明,但在链接阶段仍然失败:

    // Bar.h
    template <typename T>
    class Foo {
    public:
        static void method();
    };
    
    // Foo.h
    template <typename T>
    class Bar {
    public:
        static void method();
    };
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   R Sahu    7 年前

    当有两个相互依赖的类模板时,使用两个.h文件是没有意义的。为了能够使用 Foo ,两者都需要 Foo.h Bar.h . 为了能够使用 Bar ,你也需要两者 福奥 酒吧 . 最好把它们放在一个.h文件中。

    1. 定义类。
    2. 最后实现成员函数。

    FooBar:H:

    template<typename T>
    class Foo {
       public:
          static void call_bar();
    
          static void method() {
             // some code
          }
    };
    
    template<typename T>
    class Bar {
       public:
          static void call_foo();
    
          static void method() {
             // some code
          }
    };
    
    template<typename T>
    void Foo<T>::call_bar() {
       Bar<int>::method();
    }
    
    template<typename T>
    void Bar<T>::call_foo() {
       Foo<int>::method();
    }