Можно ли иметь #define
заявления, которое выполняет следующее:Как создать #define для создания 2d-вектора?
для простого вектора я могу это сделать:
#define dvec std::vector<double>
dvec x1d(n)
к сведению, что инстанцирование это точно так же, как и для нормального вектора. Но для 2d векторов, это не так приятно:
#define dvec2d std:vector<std:vector<double>>
dvec2d x2d(n, std:vector<double>(m))
Как я создаю определить так, что все, что мне нужно сделать, чтобы создать экземпляр dvec2d быть таким:
dvec2d x2d(n, m)
Конечно, я могу это сделать:
dvec2d x2d(n, std:vector<double>(m))
каждый раз, когда я хочу, чтобы создать один из них, но я предпочел бы не иметь, что там дополнительные std:vector<double>
- это было бы аккуратнее, если я мог бы просто dvec2d x2d(n, m)
.
EDIT: Чтобы уточнить, я знаю, что могу создать функцию, чтобы дать мне вектор или typedef, это не то, что мне нужно. Люди, использующие функции, собираются вставлять в них vector<vector<double>>
, так что это то, что им нужно. Но я не хочу иметь определения функций, которые являются массивными из-за всех определений там. Использование этого #define dvec2d ...
.
Теперь, когда я тестирую свои вещи, мне нужно создать 2d векторы. Я знаю, что могу сделать это с dvec2d my2dVector(n, std::vector<double>(m))
, но то, что я хочу знать, есть, если есть какой-либо способ, я могу написать #define
, чтобы я мог создать этих парней вот так: dvec2d my2dVector(n,m)
?
Вместо этого используйте 'typedef'. Макросы плохие и склонны генерировать неясные ошибки. Также вам понадобится параметризованный макрос, не так ли? –
Я использую макросы, так что функции, которые я пишу, все равно могут использовать 'vector>' снаружи, но мне просто хотелось бы, чтобы он был чище внутри кода. Я не собираюсь создавать многие из них, но я просто хотел знать, как это сделать ... –
will
Если 'n' и' m' являются переменными, используйте встроенную функцию. Гораздо чище, чем макрос. –