C ++ CRTP Static MemancomC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ CRTP Static Memancom

Сообщение Anonymous »

Я постараюсь держать его коротким: < /p>
У меня есть система ресурсов с базовым классом ресурсов, используя CRTP для управления статическим объектом ресурса по умолчанию для каждого типа ресурса, который решает наследовать Из этого (как можно увидеть в следующем примере). < /p>
Минимальный пример: < /p>

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

template 
class Resource {
private:
static inline ResourceT defaultResource;

public:
Resource() {}

static ResourceT* getDefaultResourceRef() {
return &defaultResource;
}

static void setDefaultResource(ResourceT pDefaultResource) {
defaultResource = pDefaultResource;
}
};

class Texture : public Resource {
private:
// Any implementation

public:
Texture() : Resource() {}
};

int main() {
Texture tex;

return 0;
}
Проблема теперь заключается в том, что программа иногда сбои до основного или даже конструктора по умолчанию (или что -то еще на самом деле) наносится и работает просто отлично до конца время. Другие (на первый взгляд) случайные вещи, такие как создание статического получения ресурса по умолчанию статическим по сравнению с не статичным или статически связывающим Libc ++ (???), также оказывают влияние на то, как часто или когда он решает сбой, а не для.
Я использовал Clang ++ для этих тестов, но когда я пытаюсь скомпилировать его с MSVC, он приводит к ошибкам, потому что ничего о DefaulTresource ( /

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

ResourceT
) известно.
и. Заказ инициализации «Фиаско»/Задача, CRTPS с компиляцией, полученное типом, неполнота и то, как C ++ обрабатывает различные виды статических переменных в целом, но все еще не может указать на точную причину этого в моем случае. Я не как -то не так, не так ли? быть доступным, верно? Почему это не известно? И почему, черт возьми, разные компиляторы, по -видимому, делают все, что они хотят? Я думаю, что это из -за неопределенного поведения, которое происходит здесь, но, пожалуйста, объясните. Предлагается в статье FAQ, связанной выше, но я хотел бы сохранить статический элемент как обычную переменную члена и в идеале не пройти через какой -то другой механизм перенаправления, если это возможно. Так что мне здесь не хватает, то, что я перечислил, уже причина, и есть ли лучшее решение для этого?
Спасибо :)

Подробнее здесь: https://stackoverflow.com/questions/794 ... on-crashes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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