Передайте объект RenderWindow из SFML в функцию шаблона - PullRequest
0 голосов
/ 20 марта 2019

Я новичок в программировании на C ++ и не профессионал.Я так запутался с шаблоном в C ++.

Я работал с SFML и мог создать окно и обработать его.На следующем шаге я решил написать шаблонную функцию для обработки сигнала закрытия при его генерации.но мой код не компилируется.в чем проблема?

#include <SFML/Graphics.hpp>
#include <iostream>

template <typename T>
void EventHandler(T& window) {
    std::cout << "Close event is made." << std::endl;
    window.close();
    std::cout << "Window is closed succesfully." << std::endl;
    break;
}

int main()
{
    sf::RenderWindow window(sf::VideoMode(512, 512), "SMFL Tutorial", sf::Style::Default);
    sf::Event events;

    while (window.isOpen())
    {
        while (window.pollEvent(events))
        {
            switch (events.type)
            {
            case events.Closed:
                EventHandler(window);
            default:
                std::cout << "Unkown Events are creating." << std::endl;
                break;
            }
        }
    }
    return 0;
}

1 Ответ

1 голос
/ 20 марта 2019

Вам нужно переместить оператор break из функции в регистр в коммутаторе и правильно использовать перечисление sf::Event::EventType:

#include <SFML/Graphics.hpp>
#include <iostream>

template <typename T>
void EventHandler(T& window) {
    std::cout << "Close event is made." << std::endl;
    window.close();
    std::cout << "Window is closed succesfully." << std::endl;
    /// break; <- From here
}

int main()
{
    sf::RenderWindow window(sf::VideoMode(512, 512), "SMFL Tutorial", sf::Style::Default);
    sf::Event events;

    while (window.isOpen())
    {
        while (window.pollEvent(events))
        {
            switch (events.type)
            {
            case sf::Event::Closed:
                EventHandler(window);
                break; /// <- To here
            default:
                std::cout << "Unkown Events are creating." << std::endl;
                break;
            }
        }
    }
    return 0;
}

Кроме того, зачем вам функция шаблона? Ваша функция EventHandler может ссылаться на sf::window для работы с sf::Window и sf::RenderWindow:

void EventHandler(sf::Window& window) {
    std::cout << "Close event is made." << std::endl;
    window.close();
    std::cout << "Window is closed succesfully." << std::endl;
}
...