Переменное количество аргументов для конструктора с переменными типами, создающими закрытый член переменной в C ++ - PullRequest
0 голосов
/ 16 февраля 2011

У меня действительно тяжелая задача, и я не нашел достаточно хорошего решения.Итак, вот описание: - задача состоит в том, чтобы оценить несколько массивов с одним измерением, число которых может варьироваться - хорошая новость заключается в том, что можно указывать типы массивов

и желаемый способ сделать это: - создать классс конструктором, который принимает переменное число массивов - эти массивы также следует использовать в качестве свойств (приватных членов), чтобы с ними можно было выполнить несколько операций в течение жизненного цикла объекта

Как я пытался это сделать:- функция-член конструктора с переменным числом параметров (я не уверен, почему это не работает) - лучше использовать конструктор с вектором, но как хранить массивы этого типа, указанные в отдельном массиве, то есть вы не можете ожидатьопределенный тип данных для определенного массива заранее - я пытался объявить переменное число массивов как частные члены с препроцессором, но кажется, что циклы и другой код не работают хорошо внутри private: объявление

Есть идеи у кого-нибудь?*

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

конструктор, который принимает переменное число массивов:

vector< vector<T> > ?

внутренние векторы могут быть разных размеров, но должны быть одного типа.

функция-член конструктора с переменным числом параметров

Вы можете использовать функцию с переменным числом параметров, которая создает класс, посмотрите, как работает boost :: bind, который принимает множество различных списков параметров.

boost mpl может ответить на то, что вы пытаетесь сделать, хотя это довольно неясно.

0 голосов
/ 16 февраля 2011

Почему бы не использовать простой параметризованный класс?

Если ваш компилятор поддерживает C ++ 0x, вы также можете использовать список инициализаторов для конструкторов с переменным числом параметров.

template<class ArrayType>
class ArrayContainer
{
   std::vector<ArrayType> m_arrays;

   public:
   ArrayContainer(std::initializer_list<ArrayType> arrays)
   {
     m_arrays.reserve(arrays.size());
     std::copy(arrays.begin(), arrays.end(), m_array);
   }
};

Конструктор теперь принимает переменное количество массивов.

auto container = new ArrayContainer({ a, b, c });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...