В моем проекте есть следующие классы: Neuron
, ActivationNeuron
, Layer
и ActivationLayer
, как это частично указано ниже.C++ 11 вектор индексирования интеллектуальных указателей как член класса
class Neuron { }; /* abstract class */
class ActivationNeuron : public Neuron { };
class Layer {
protected:
vector<shared_ptr<Neuron>> neurons;
public:
Neuron& operator[](const int index) {
return *this->neurons[index];
}
};
class ActivationLayer : public Layer {
public:
ActivationNeuron& operator[](const int index) {
return *static_pointer_cast<ActivationNeuron>(this->neurons[index]);
}
};
У меня есть два вопроса:
Реализация/Синтаксис Связанные: Слой теперь использует
shared_ptr
е нейроны. Как изменить мою реализацию, если я планирую использоватьunique_ptr
с вместо этого, учитывая, чтоstatic_pointer_cast
недоступен дляunique_ptr
?Семантика Связанный: Должен ли я использовать
unique_ptr
с при всех в этом случае, учитывая, что код в других классах (в том числе моих тестов) часто ссылаются оператор индексирования для вызова функции наActivationNeuron
ссылки?Больше Семантики: Данных гарантированно будет использоваться только до тех пор, как
Layer
экземпляра находится в области видимости (без отложенной регистрации). Как влияет действие типа указателя, если вместо этого я вместо этого вернусьpointer<Neuron>
иpointer<ActivationNeuron>
? Меня больше интересует семантика перемещений/копий и политика владения, а не (некритические) эффекты в производительности.
Я также приветствую улучшения в моей текущей реализации.
Используйте ['get'] (http://en.cppreference.com/w/cpp/memory/unique_ptr/get), чтобы получить фактический указатель, а затем обычный' static_cast'? –