Два шаблонных класса с методами, вызывающими друг друга - PullRequest
0 голосов
/ 05 июня 2018

Два шаблонных класса имеют два метода, каждый из которых вызывает метод другого класса:

// 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 голосов
/ 05 июня 2018

Если у вас есть два шаблона классов, которые зависят друг от друга, использование двух файлов .h не имеет смысла.Чтобы иметь возможность использовать Foo, вам нужны Foo.h и Bar.h.Чтобы иметь возможность использовать Bar, вам также нужны Foo.h и Bar.h.Лучше всего поместить их в один файл .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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...