У меня есть класс A
, который содержит некоторые данные, используя boost::intrusive_ptr
:
#include "Data.h"
class A {
boost::intrusive_ptr<Data> data;
}
Класс Data
является преемником базового класса RefCounted
, для которого функционируют intrusive_ptr_release
и intrusive_ptr_add_ref
реализованы как требуется.
Я собираюсь сократить время компиляции, поэтому я пытаюсь использовать предварительное объявление:
class Data;
class A {
boost::intrusive_ptr<Data> data;
}
Он не компилируется, говоря:
intrusive_ptr_release: идентификатор не найден(RefCounts *) ': невозможно преобразовать аргумент 1 из «Data *» в «RefCounts *», на который указывает ссылка;преобразование требует reinterpret_cast, приведение в стиле C или приведение в стиле функции
Я понимаю значение ошибок компилятора: он не знает, что RefCounted
является суперклассом для Data
, потому что Data
являетсянеполный тип.Но, в любом случае, есть ли здесь какой-нибудь способ или хитрость, позволяющая избежать включения заголовка Data.h
для ускорения компиляции при работе с форсированными навязчивыми указателями?