将 SFML 的 RenderWindow 对象传递给模板函数
Pass a RenderWindow object of SFML to a template function
我是一个新手C++程序员,我不是专业人士。我对 C++ 中的模板很困惑。
我正在使用 SFML,我可以创建一个 window 并处理它。在下一步中,我决定编写一个模板函数来处理生成的关闭信号。但我的代码无法编译。问题出在哪里?
#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;
}
您需要将 break 语句从您的函数移动到 switch 中的 case 并正确使用 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;
}
我是一个新手C++程序员,我不是专业人士。我对 C++ 中的模板很困惑。
我正在使用 SFML,我可以创建一个 window 并处理它。在下一步中,我决定编写一个模板函数来处理生成的关闭信号。但我的代码无法编译。问题出在哪里?
#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;
}
您需要将 break 语句从您的函数移动到 switch 中的 case 并正确使用 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;
}