C ++ CRTP -шаблон, определения конструктораC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ CRTP -шаблон, определения конструктора

Сообщение Anonymous »

Я в настоящее время играю с шаблоном CRTP в моем проекте C ++ и наткнулся на проблему, что я должен переопределить конструктор несколько раз. Мне любопытно, неверен ли мой подход или я могу настроить код, чтобы я мог определить его один раз, и все полученные классы могут справиться с ним просто хорошо. < /P>
У меня есть следующий код правильно Теперь: < /p>

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

celestial_body.hpp
:

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

#pragma once

#include 

#include 
#include 

class CelestialBodyBase {
public:
CelestialBodyBase(std::string name, double mass, double radius)
: name(name), mass(mass), radius(radius), position({0.0, 0.0, 0.0}) {}
virtual ~CelestialBodyBase() = default;
virtual void update() = 0;

protected:
std::string name;
double mass;
double radius;
Vector3 position;
};

template 
class CelestialBody : public CelestialBodyBase {
public:
CelestialBody(std::string name, double mass, double radius)
: CelestialBodyBase(name, mass, radius) {}
void update() { derived()->update(); }

private:
T* derived() { return static_cast(this); }
};
< /code>
planet.hpp

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

#pragma once

#include 

class Planet : public CelestialBody {
friend class CelestialBody;

public:
Planet(std::string name, double mass, double radius);
~Planet();
void update();
};
< /code>
planet.cpp

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

#include 

Planet::Planet(std::string name, double mass, double radius)
: CelestialBody(name, mass, radius) {}

Planet::~Planet() {}

void Planet::update() {
// Update planet
// ...
}
< /code>
As you can see, there is a constructor which is basically the same for all 3 classes being defined here. Mind that I have the CelestialBodyBase
класс, чтобы сделать его совместимым с контейнерами STL. Я вроде ожидал, что смогу просто определить конструктор, например, в базе, и полученные классы наследуют это. Схема выглядит правильно, могу ли я что -то изменить, чтобы сделать его менее утомительным для печати?


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

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

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

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

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

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