Прототип класса шаблона C ++, определение функции - PullRequest
0 голосов
/ 06 января 2012

Я хочу написать функцию, которая создает «Вектор» (шаблон), сохраняет в нем пару значений, а затем возвращает этот вектор.Я определяю функцию ниже "main" и поэтому использую прототип:

Vector<double> VectorMouseClick;

Это правильный прототип?

После "main" я определяю функцию, и япытаясь сделать это таким образом, но я не уверен, что это правильный путь:

Vector<double> VectorMouseClick()
{
    Vector<double> vector();
     ...some code manipulating values and storing them in "vector"...
    return vector;
}

Если функция возвращает класс, который я указываю (иначе Vector), как мне написать прототип?Так как это шаблонный класс, я делаю это, как указано выше: Vector VectorMouseClick;или это: Vector VectorMouseClick;(как и другие прототипы (int ReturnValues, void SomeFunct и т. д.)

Когда именно я могу использовать «void» в прототипе? Это только для функций, которые не «возвращают» значение? I 'Мы просмотрели ответы здесь, но поскольку я новичок в C ++, некоторые из них немного сложны для понимания. Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Это правильный прототип?

Нет, вам нужны скобки, чтобы указать, что это функция (пустая, поскольку функция не принимает аргументов):

Vector<double> VectorMouseClick();

Без скобок вы объявляете переменную, а не функцию.

Если функция возвращает указанный мной класс (он же Vector), как мне написать прототип?

В общем случае объявление функции всегда return_type function_name(arguments); (возможно, с несколькими дополнительными битами). Класс - это тип, поэтому просто укажите его имя в качестве возвращаемого типа. Класс template не является классом (или типом), поэтому вам необходимо предоставить аргументы шаблона, чтобы сделать его классом.

Когда именно я могу использовать «void» на прототипе? Это только для функций, которые не «возвращают» значение?

Совершенно верно. void используется в местах, где вы должны указать тип, но нет типа, который можно указать; в случае типа возвращаемого значения функции это означает, что ничего не возвращается.

1 голос
/ 06 января 2012

Нет, это не так.В общем случае:

T t; 

объявляет переменную типа T с именем t.

T t();
T t(void);

является одинаковым способом объявления функции, не имеющей параметров, возвращающей T и именованной t.

Использование одного или другого - просто проблема стиля, поскольку в C пустота была необходима, а в C ++ - нет.Если вы не возвращаете никакого значения, тип возвращаемой функции - void.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...