草庐IT

friend_events

全部标签

c++ - 内部类、pimpl 和一个 friend 类——不同意的编译器

我正在研究一些旧的库代码,其基本目标是重构它。这段旧代码并不完全符合最佳实践和美观(是的-friend是坏人,在发现以下内容后已将其删除-因为它是重构中的疏忽)。现在准备运行一些单元测试,我用clang++、g++和vc++编译了代码(2005-是的,我知道它很旧,但为了向后兼容-我必须这样做)。g++和clang++编译和运行没有错误,但是VisualC++报错,所以在查看代码后,我发现了一些类似的东西:#includeclassone{private:structprivate_impl;private_impl*pimpl_;public:one();~one();voidsay

c++ - Windows Web Server 2008 中的事件 CTRL_CLOSE_EVENT 未调用 CtrlHandler

我有一个控制台应用程序,它使用SetConsoleCtrlHandler设置一个处理程序来处理和CTRL_CLOSE_EVENT。处理程序仅返回TRUE,这将导致出现一个对话框并提示用户继续关闭或取消。该软件在WindowsXPSP3和WindowsWebServer2008SP2上运行。在XP上,当单击控制台窗口上的“X”时,将调用我的控制处理程序并按预期出现提示。在Server2008上,关闭控制台窗口不会调用我的控制处理程序,应用程序会在没有提示的情况下关闭。为了检查控制处理程序是否设置正确,我为CTRL_C_EVENT添加了一个案例。我可以看到为Ctrl-C调用了代码。在Ser

c++ - 如何声明两个类使得 A 具有 B 的成员并且 B 将 A 的成员标记为 friend ?

我正在尝试做C++Primer第5版中的练习7.32。该练习要求以下内容:DefineyourownversionsofScreenandWindow_mgrinwhichclearisamemberofWindow_mgrandafriendofScreen.下面是文中给出的Screen、Window_mgr和clear的定义。classScreen{public:usingpos=std::string::size_type;Screen(posht,poswd,charc):height(ht),width(wd),contents(ht*wd,c){}private:poshe

c++ - 如何在模板类中声明 friend 用户定义的文字运算符?

目前还不清楚为什么下面的代码不能用GCCg++4.7编译,说明如下:$g++-std=c++11-fPICtest.cpptest.cpp:11:45:error:‘Boperator""_b(constchar*,size_t)’hasinvalidargumentlist如果类C被声明为非模板,那么它可以正常编译。#includestructB{};Boperator+(B,B){returnB();}Boperator""_b(constchar*,size_t){returnB();}templateclassC{friendBoperator+(B,B);friendBope

c++ - 我可以只用事件、互斥量和信号量实现公平的 "wait on multiple events"吗?

在只有事件[1]、互斥锁和信号量[2]的平台上,我可以创建一个公平的“等待多个事件”实现,当任何事件[3]发出信号/设置时返回。我假设现有的原语是公平的。[1]事件是具有4个操作的“标志”:Set()、Clear()、Wait()和WaitAndClear()。如果你在一个未设置的事件上等待(),你会阻塞直到有人设置()它。WaitAndClear()听起来像,但是原子的。所有服务员都被唤醒。[2]我认为系统不支持负值的信号量。[3]我说的是“事件”,但它可能是使用任何这些原语的新对象类型。 最佳答案 对于window,WaitFo

c++ - friend 功能在这里得到继承吗?

Derived类中的方法fun()是私有(private)的。当我们通过运行时多态调用函数ptr->fun()时,它正在执行。但这违反了派生类的封装属性。#includeusingnamespacestd;classDerived;classBase{private:virtualvoidfun(){coutfun();return0;}谁能解释一下发生了什么? 最佳答案 首先,你的Derived::fun()也是virtual,因为如果派生类中的函数与派生类中的虚函数具有相同的声明基类,派生类中的函数自动获得virtual,即使没

c++ - 与 friend 一起上课而不是前向声明,: which compiler is correct

这个问题在这里已经有了答案:Friendmethod"notdeclaredinthisscope"inC++(1个回答)Error:'FriendMemberFunctionName'wasnotdeclaredinthisscope(3个答案)关闭3年前。我有这个简单的C++程序:#includestructobj{friendintf(int);voidm(intx){std::cout如果我使用GNUC++编译器g++进行编译,我会得到错误prog.cpp:7:55:error:'f'wasnotdeclaredinthisscope但是,如果我使用cl(和/W4)编译它,它会

c++ - ADL 和 friend 注入(inject)

考虑这段代码:templatestructX{friendvoidf(X*){}};intmain(){f((X*)0);//Error?}编译器似乎非常不同意。(MSVC08/10说不是,GCC根据“C++模板-完整指南”:...itisassumedthatacallinvolvingalookupforfriendsinassociatedclassesactuallycausestheclasstobeinstantiated...AlthoughthiswasclearlyintendedbythosewhowrotetheC++standard,itisnotclearly

c++ - 如何使用 C++ (keybd_event) 发送 unicode 键

我的friend正在学习挪威语,我想制作一个全局热键程序来发送诸如æøå我的问题是keybd_event函数不允许我发送那些key,我似乎仅限于virtualkeycodes我可以使用其他功能或一些技巧来发送它们吗? 最佳答案 您必须改用SendInput。keybd_event不支持发送此类字符(除非它们已经在当前代码页中,例如在挪威计算机上)。发送å的一些示例代码:KEYBDINPUTkb={0};INPUTInput={0};//downkb.wScan=0x00c5;kb.dwFlags=KEYEVENTF_UNICODE;

c++ - ovly_debug_event 在 chrome 中有什么作用?

我在看chrome的线程栈的时候发现很多线程都有类似这样的痕迹:0,wow64cpu.dll!TurboDispatchJumpAddressEnd+0x6c01,wow64cpu.dll!TurboDispatchJumpAddressEnd+0x4a82,wow64.dll!Wow64SystemServiceEx+0x1ce3,wow64.dll!Wow64LdrpInitialize+0x4294,ntdll.dll!RtlIsDosDeviceName_U+0x24c875,ntdll.dll!LdrInitializeThunk+0xe6,ntdll.dll!ZwWaitF