草庐IT

friend-function

全部标签

c++ - 哪个更合适 : getters and setters or functions?

如果替代函数名称使API更明显,是否应该放弃getter和setter的“getMyValue()”和“setMyValue()”模式?例如,假设我在C++中有这个类:publicclassSomeClass{private:boolmIsVisible;public:voiddraw();voiderase();}我可以像这样添加函数来获取/设置“mIsVisible”:boolgetVisible(){returnmIsVisible;};voidsetVisible(boolvisible){if(!mIsVisible&&visible){draw();}elseif(mIsV

c++ - 在 std::function 上强制执行 "noexcept"?

此代码编译并运行,抛出int:#includevoidr(std::functionf){f();}voidfoo(){throw1;}intmain(){r(foo);}但是我希望编译器拒绝r(foo);行,因为r应该只传递一个noexcept函数。noexcept说明符似乎被忽略了。有什么办法可以实现吗?编辑:这个问题不同于Isknowledgeaboutnoexcept-nesssupposedtobeforwardedwhenpassingaroundafunctionpointer?因为我要求补救措施,特别是在std::function的情况下。

c++ - 为什么 std::function 构造函数或赋值之间存在差异?

std::function类型删除构造函数定义为:templatefunction(Ff);赋值运算符定义为:templatefunction&operator=(F&&f);(来源cppreference)为什么构造函数通过值获取f,而operator=通过转发引用获取f? 最佳答案 我只能猜测,但我猜这是因为它被添加到C++而右值引用和转发引用被添加到语言中。因此其API的某些部分获得了转发引用,而另一些则没有。有一个小优点:如果F的复制构造函数可以扔而移动不能,std::function(F)可以保证不抛出,而std::fun

c++ - 带有 C++ 模板的虚假 "use of local variable with automatic storage from containing function"?

以下代码无法在g++7.2.0中编译templateclassRequest{intcontent=0;public:friendvoidsetContent(inti,void*voidptr){Request*ptr=(Request*)voidptr;ptr->content=i;}intgetContent(){returncontent;}};intmain(){Requestreq;setContent(4,&req);returnreq.getContent();}有错误test.cpp:Ininstantiationof‘voidsetContent(int,void*

C++ 模板 : Partial Template Specifications and Friend Classes

是否有可能以某种方式使部分模板规范成为友元类?IE。考虑你有以下模板类templateclassX{Tt;};现在你有了部分特化,例如,指针templateclassX{T*t;};我想要完成的是每一个可能的X是X的好友类对于任何S.IE。X应该是X的friend.当然,我想到了X中的常用模板友元声明:templateclassX{templatefriendclassX;}但是,这不会编译,g++告诉我:test4.cpp:34:15:错误:'templateclassX的特化'必须出现在命名空间范围内test4.cpp:34:21:错误:部分特化'X'声明'friend'这根本不可

c++ - 如何为模板类中定义的类定义 friend

假设我有以下定义嵌套类的模板类:templatestructfoo{structbar{};};假设我正在编写代码的环境也有以下帮助程序类,它应该专门用于需要特殊处理的任何类型:templatestructmaybeChangeType{usingtype=T;}/*default:sametype*/我怎样才能专攻maybeChangeType对于foo::bar?专门针对foo::bar很容易,但是foo将与100多种不同的T一起使用所以这不是一个真正的选择。注意:请在将此问题标记为重复之前仔细阅读。这个问题不是询问一般如何专门化(例如Understandingtemplatesi

c++ - is_constructible 和 is_destructible 不受 friend 声明的影响

在评估std::is_constructible和std::is_destructible时,Clang和GCC似乎不遵守friend声明。关于`is_constructible,cppreference.comsays:AccesschecksareperformedasiffromacontextunrelatedtoTandanyofthetypesinArgs.Onlythevalidityoftheimmediatecontextofthevariabledefinitionisconsidered.(该站点没有解释is_destructible如何处理访问检查,但访问修饰符

c++ - C++ 标准库必须支持对 friend 是谁挑剔的类吗?

这个问题最容易用一个例子来说明,所以这里是:像下面这样的代码是否保证有效,并且可以正确编译和运行?(并不是所有的实现都能正确地编译它,但我想知道这是否是一个错误。)#includeclassPicky{friendPicky*std::copy(Pickyconst*,Pickyconst*,Picky*);Picky&operator=(Pickyconst&){return*this;}public:Picky(){}};intmain(){Pickyconsta;Pickyb;std::copy(&a,&a+1,&b);return0;} 最佳答案

c++ - 更改 CMAKE_CXX_FLAGS_DEBUG 和 CMake 中的 friend 的默认值

我想在CMake中更改CMAKE_CXX_FLAGS_RELEASE或CMAKE_CXX_FLAGS_DEBUG的默认值。基本上,我有一些项目默认值与CMake的默认值略有不同(例如,发布),我不必问自己“哦,当添加add_compile_options时,他们的-O3或我们的-O2是否优先。”现在,我知道如何设置这些值,但我不知道如何通过两种常用方式让用户可以编辑它们:通过在命令行上使用-DCMAKE_CXX_FLAGS_DEBUG=yourflags或通过使用ccmake或CMakeSetup配置它。问题是CMAKE为这些设置和缓存了自己的默认值,如果您尝试在不使用FORCE的情况

C++:莫名其妙的 "pure virtual function call"错误

我在使用MicrosoftVisualC++2015时遇到了一些困难,但能够用一个小程序重现该问题。给定以下类:classBaseClass{public:BaseClass():mValue(0),mDirty(true){}virtual~BaseClass(){}virtualintgetValue()const{if(mDirty)updateValue();returnmValue;}protected:virtualvoidupdateValue()const=0;mutableboolmDirty;mutableintmValue;};classDerivedClass: