Шаблон C++, использующий неопределенный тип [закрыт]C++

Программы на C++. Форум разработчиков
Anonymous
Шаблон C++, использующий неопределенный тип [закрыт]

Сообщение Anonymous »

Рассмотрим следующие классы:
Instance.h:

Код: Выделить всё

template
class Instance {

public:
string getName() const {
return instance->getName();
}

private:
T instance;
}
Layer.h:

Код: Выделить всё

#include "Instance.h"

class Layer {

public:

void method() {
instance.getName();
}

string getName() const {
return "";
}

private:
Instance instance;
}
Очевидно, это какой-то псевдокод выше, но что-то вроде этого не может скомпилироваться в Instance.h с «использованием неопределенного типа 'Layer'». Я так понимаю, это потому, что у нас есть Instance внутри Layer, он не полностью создан к тому моменту, когда его нужно будет использовать в Instance.h (?)
Я могу решить эту проблему, поместив реализацию getName() в файл Instance.cpp и это внизу:

Код: Выделить всё

template class Instance;
Однако такой подход противоречит цели шаблона, поскольку теперь мне придется включать специализации для каждого типа, где это происходит.
Это то, что нужно? единственное решение (если не считать удаления ссылки на экземпляр внутри слоя) или есть какой-то другой ответ, не требующий специализации?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/786 ... fined-type

Вернуться в «C++»