两个模板类,其中方法相互调用

时间:2018-06-04 22:21:17

标签: c++ templates

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

// 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"添加到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 个答案:

答案 0 :(得分:3)

当你有两个相互依赖的类模板时,使用两个.h文件是没有意义的。为了能够使用Foo,您需要Foo.hBar.h。为了能够使用Bar,您还需要Foo.hBar.h。最好将它们放在一个.h文件中。

  1. 定义类。
  2. 最后实现成员函数。
  3. 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();
    }