Нужна помощь в отношении псевдонима для функции - PullRequest
1 голос
/ 04 апреля 2019

Так что я работаю над заданием в c ++, где нам говорят использовать псевдоним для функции или, по крайней мере, для указателя на функцию (насколько я понимаю).Это не рассматривается как «учебная программа» (что нам нужно выучить, не знаю, правильное ли это слово), и поэтому не читалось лекций.

Чтобы дать более четкое представление о задаче, у меня есть класс «Транспортное средство» с функцией draw(), которая обновляет скорость транспортного средства и выводит ее на экран.Затем нам говорят использовать указатели функций для перемещения входной части draw() в отдельную функцию.Эта отдельная функция должна быть закрытым членом класса, инициализированным в конструкторе.Затем нам говорят использовать этот «псевдоним», чтобы облегчить чтение кода:

using drivingAlgorithm = std::pair<double,double> ( PhysicsState ps,
const std::vector<std::pair<double,double>>& goals,
int currentGoal);

Он должен быть помещен в другой файл .h, где также определена структура PhysicsState.Мой вопрос: как мне использовать этот «псевдоним»?Более конкретно, где я могу определить фактическое тело функции, для которой я использую псевдоним?Кажется, я не могу найти ответ в нашем учебнике, и ни в одном поиске в Google.

1 Ответ

2 голосов
/ 04 апреля 2019

Я думаю, что вы, вероятно, получили неправильный конец палки.Здесь нет ничего сложного.Возможно, поможет короткий пример.

include <vector>
#include <utility>

class PhysicsState
{
};

using drivingAlgorithm = std::pair<double, double>(PhysicsState ps,
    const std::vector<std::pair<double, double>>& goals,
    int currentGoal);

class Vehicle
{
public:
    Vehicle(drivingAlgorithm da) : _da(da) {}
private:
    drivingAlgorithm _da;
};

std::pair<double, double> my_algorithm(PhysicsState ps,
    const std::vector<std::pair<double, double>>& goals,
    int currentGoal)
{
    return std::make_pair(0.0, 0.0);
}

int main()
{
    Vehicle v(my_algorithm);
}

using x = ... просто устанавливает псевдоним типа , а не псевдоним функции (такого не существует).В этом случае тип является типом функции.Но в любом случае вы используете псевдоним типа так же, как и любой другой тип.

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