Шаблонные методы, вызывающие друг друга в C ++ - PullRequest
0 голосов
/ 05 июня 2018

У меня есть 2 класса с методами, которые вызывают друг друга.Одним из них является метод шаблона:

// Foo.h
class Foo {
public:
    void foo_method() {
        Bar::bar_method();
    }

    template <typename U>
    static void foo_other_method() {
        // some code
    }
};

// Bar.h
class Bar {
public:
    static void bar_method() {
        Foo::foo_other_method<int>();
    }
};

И я называю это так:

Foo f;
f.foo_method();

Как мне расположить директивы #include в Foo.h и Bar.hтак этот код компилируется?

1 Ответ

0 голосов
/ 05 июня 2018

Переместите реализацию Foo::foo_method(), чтобы было доступно определение Bar.

Поскольку это не шаблон функции, вы можете переместить его в файл .cpp.

Foo.h:

#pragma once
class Foo {
public:
    void foo_method();

    template <typename U>
    static void foo_other_method() {
        // some code
    }
};

Bar.h:

#pragma once
// Need this so Foo::foo_other_method() can be used.
#include "Foo.h"
class Bar {
public:
    static void bar_method() {
        Foo::foo_other_method<int>();
    }
};

Foo.cpp:

#include "Foo.h"
#include "Bar.h"

void Foo::foo_method()
{
   Bar::bar_method();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...