Код: Выделить всё
Foo.hКод: Выделить всё
class Foo
{
private:
int a;
bool b;
float c;
};
Чтобы Чтобы уменьшить передачу CPU->GPU, этот API настраивает буферы в памяти GPU/VRAM на основе смежных сегментов памяти CPU/RAM. Это означает, что буферы заполняются (в большинстве случаев) массивами чего-то вроде Foo, при этом API ожидает, что a, b, c и т. д. будут находиться с точными смещениями. в оперативной памяти с начала каждого экземпляра Foo. Обычно это не проблема, поскольку я могу просто указать буферу проверить offsetof() каждого члена в Foo, но проблема возникает с добавленным контекстом.
< р>Я пытаюсь интегрировать сам Foo в свой собственный API и поэтому хочу использовать PIMPL, чтобы скрыть объявление членов Foo от пользователей API:
Код: Выделить всё
Foo.hКод: Выделить всё
#include
class Foo
{
class PIMPL;
public:
Foo();
private:
std::unique_ptr
impl;
};
Код: Выделить всё
Foo.cppКод: Выделить всё
class Foo::PIMPL{
public:
int a;
bool b;
float c;
};
Foo::Foo(){
impl = std::make_unique
();
}
Какие решения доступны мне, чтобы позволить PIMPL скрывать объявления членов от пользователей моего API и по-прежнему гарантировать, что каждый элемент скрыт PIMPL< /code> будет иметь постоянное смещение ОЗУ от начала любого и каждого экземпляра Foo?
Подробнее здесь: https://stackoverflow.com/questions/791 ... impl-idiom
Мобильная версия