gpt4 book ai didi

c++ - 为什么 boost::assign::ptr_map_insert 将构造函数参数调用更改为 const 引用?

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:42 25 4
gpt4 key购买 nike

我对以下行为感到困惑:

我的“应用程序”类使用 ptr_map_insert 将类型“SplashScreen”(派生 self 的类“屏幕”,它是容器类型)的构造函数元素添加到屏幕类型的指针容器中。示例:

boost::assign::ptr_map_insert<SplashScreen>(screenContainer_)(GameScreens::Splash, curWindow_, curFileSystem_, curInputManager_);

根据ptr_map_insert的文档,最后一对括号以key开头,后面的参数传递给SplashScreen类的构造函数。

curWindow_ 等是我的“应用程序”类的非常量私有(private)成员

不知道为什么,GCC报错是因为传递给构造函数的参数是const引用,而SplashScreen的构造函数需要正则引用。

SplashScreen(sf::RenderWindow& curWindow, System::FileSystem& curFileSystem, System::InputManager& curInputManager);

完整的错误消息在下面,部分由我翻译,因为它是/曾经是德语。

/usr/include/boost/preprocessor/iteration/detail/local.hpp: In Elementfunktion »boost::assign::ptr_map_inserter<PtrMap, Obj>& boost::assign::ptr_map_inserter<PtrMap, Obj>::operator()(const T&, const T0&, const T1&, const T2&) [with T = Oxid::GameScreens::gameScreenEnum, T0 = sf::RenderWindow, T1 = Oxid::System::FileSystem, T2 = Oxid::System::InputManager, PtrMap = boost::ptr_map<Oxid::GameScreens::gameScreenEnum, Oxid::Screen>, Obj = Oxid::Game::SplashScreen, boost::assign::ptr_map_inserter<PtrMap, Obj> = boost::assign::ptr_map_inserter<boost::ptr_map<Oxid::GameScreens::gameScreenEnum, Oxid::Screen>, Oxid::Game::SplashScreen>]«:
/blabla/main/application.cpp:42:132: instanced(?) from here
/usr/include/boost/preprocessor/iteration/detail/local.hpp:43:1: Error: no matching function for calling »Oxid::Game::SplashScreen::SplashScreen(const sf::RenderWindow&, const Oxid::System::FileSystem&, const Oxid::System::InputManager&)«
/usr/include/boost/preprocessor/iteration/detail/local.hpp:43:1: Anmerkung: candidates are :
../include/splashscreen.h:16:17: Anmerkung: Oxid::Game::SplashScreen::SplashScreen(sf::RenderWindow&, Oxid::System::FileSystem&, Oxid::System::InputManager&)
../include/splashscreen.h:16:17: Anmerkung: no known conversion for argument 1 from »const sf::RenderWindow« to »sf::RenderWindow&«
../include/splashscreen.h:13:15: Anmerkung: Oxid::Game::SplashScreen::SplashScreen(const Oxid::Game::SplashScreen&)
../include/splashscreen.h:13:15: Anmerkung: candidate requires 1 Argument, 3 denoted

boost 源代码并未表明参数已更改为 const 或类似内容。发生此转换时我忽略了什么?

编辑:刚刚查看了实际的 boost 更新日志(我使用的是 1.48.0),但它们不包含有关此问题的内容。

问候

最佳答案

当我查看源代码时,它似乎确实通过 const 引用获取参数,大概是这样,在大多数情况下您不会担心丢失 const。我相信在您的情况下,您将不得不直接在 ptr_map 上使用 insert 而不是帮助程序模板。

关于c++ - 为什么 boost::assign::ptr_map_insert 将构造函数参数调用更改为 const 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11438092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com