Я пытаюсь создать шаблон класса, где его конструктор имеет конструктор Variadic, и каждый тип параметра должен быть одним и тем же типом данных. Я хотел бы сохранить все параметры в контейнер std::vector< std::shared_ptr<T> >
. Если параметры не переданы, то самое первое shared_ptr<>
в vector<>
будет установлено и сохранено как nullptr
. Также я хотел бы иметь возможность отслеживать, сколько параметров передано. Пока это то, что я пробовал.Шаблон класса с вариационным конструктором; сохранение параметров в std :: vector <std :: shared_ptr <>>
декларация
template<typename T>
class Nodes {
private:
unsigned m_numParams;
std::vector<sstd::shared_ptr<T>> m_vNodes;
public:
explicit Nodes(T...); // Not sure how to set first parameter as being default to nullptr along with the variadic syntax.
};
определение
template<typename T>
Nodes<T>::Nodes(T...) {
if (/* no parameters passed in or 1st parameter is nullptr */) {
T* ptr = nullptr;
m_vNodes.push_back(ptr);
} else {
for each (/* parameter with same data type */) {
std::shared_ptr<T> sptr(new T());
m_vNodes.push_back(sptr);
}
}
m_numParams = m_vNodes.size();
}
Мое понимание основных шаблонов является достойным, но мое использование функций или переменного числа шаблонов ограничены, и я пытаюсь узнать новым методы для дальнейшего улучшения моего общего навыка, установленного на языке C++. Я хотел бы знать, является ли мой первоначальный подход логически правильным путем; если эта концепция будет достигнута, и если да, то какой будет наиболее эффективный способ ее реализации, поэтому, когда я использую этот шаблон класса, это то, чего я ожидал бы и действительно имел бы место, как в этом примере ниже:
#include "SomeHeader.h"
int main() {
int x = 3;
int y = 5;
int z = 7;
Nodes<int> someNodes(x, y, z);
return 0;
}
внутренние узлы приватная переменная-член будет иметь shared_ptr<int>
где
Nodes::m_vNodes[0] = address of x with value 3 stored
Nodes::m_vNodes[1] = address of y with value 5 stored
Nodes::m_vNodes[2] = address of z with value 7 stored
и если параметры не передаются, как в ...
#include "SomeHeader.h"
int main() {
Nodes<int> someNodes();
return 0;
}
внутренняя переменная-член должна иметь «nullptr», хранящуюся в местоположении [0]. Должен ли я также реализовать его конструктор по умолчанию Nodes(); Или это достижимо все от одного конструктора?
Как только я правильно работаю над этим конструктором, у меня не возникнет проблем с переходом вперед, чтобы написать функции или методы для добавления, удаления, извлечения, хранения, упорядочивания или сортировки данных, сравнения данных или управления данными. Я искал здесь и там и, похоже, не нашел ничего подходящего для того, что я ищу. Любые советы, советы, помощь, ссылки или примеры будут по-настоящему оценены, и я любезно благодарю вас заранее.
Это звучит, как вы, возможно, хотите [ 'std :: initializer_list'] (http://en.cppreference.com/w/cpp/utility/initializer_list) – NathanOliver
@NathanOliver Я поддержал вашу компанию как я люблю и ценю предложение или подсказку. Однако я пытался понять, как это можно сделать так, как я изначально спросил. Я стараюсь изо всех сил изучать вариационные функции/вариационные шаблоны и т. Д. –