У меня есть std::array
, который заполнен всеми типами перечисления. Я бы хотел реализовать мои кортежи на основе .Как автоматизировать создание наборов шаблонных классов на основе элементов массива?
class CompBase
{
public:
enum CompType{
INPUT,
GRAPHICS
// (+ 5-10 additional types)
};
static const std::array<CompType, 2> compTypeArr;
};
const std::array<CompBase::CompType, 2> CompBase::compTypeArr =
{
CompBase::INPUT,
CompBase::GRAPHICS
};
template<CompBase::CompType compType_e>
class CompHolder {}; // owns one component
template<CompBase::CompType compType_e>
class CompContainer {}; // references N components
class CompInterface
{
// ...
private:
std::tuple // I want to automate this,
<
CompHolder<CompBase::INPUT>,
CompHolder<CompBase::GRAPHICS>
> compHolders;
};
class CompHandler
{
// ...
private:
std::tuple // and this process, based on the predefined array
<
CompCont<CompBase::INPUT>,
CompCont<CompBase::GRAPHICS>
> compContainers;
};
В моем понимании std::make_tuple
даже не constexpr
перед тем c++14
ref , так что я не уверен, если это вообще возможно, так как я был бы нужен метод c++11
. Наличие массива я считаю вроде обязательным, поскольку только перечисление не предоставляет необходимых функций для чего-то вроде этого.
как насчет того, чтобы вы перечислили список типов? то было бы намного проще использовать позже. IMHO, перечислив список «типов», довольно беден, для этого существуют вариативные шаблоны. – OznOg
Это может быть плохо, но я получаю довольно приятные функциональные возможности, и это проще реализовать; хотя да, у меня есть несколько проблем. Я использовал вариационные шаблоны раньше, и я на самом деле не думаю, что они сделают вещи чище, чем это, или как расширяемые (если это сработает, с другой стороны, я очень открыт для него, конечно). – MatrixAndrew
Поскольку вам не кажется, что вам нужно дважды писать список счетчиков (это третья копия, которую вы хотите автоматизировать здесь), тогда вы можете сохранить «enum» и заменить «array» на экземпляр вариационного шаблона , из которого вы можете получить требуемую автоматизацию. Это похоже на решение? – bogdan