草庐IT

android - 是否可以在 Android 中灰显(不仅仅是禁用)MenuItem?

对于相同的功能onBlackberry有一个问题,并且有几个不同的线程引用了这个bug(据我所知,它已经关闭,没有解决方案),但我还没有找到一个专门用于Android的。我根据某些状态在某些MenuItem上调用setEnabled(false),但它们在视觉上看起来是一样的。我希望它们以某种方式被抵消,以便用户知道该选项当前不可用——有什么办法吗? 最佳答案 在所有android版本上,最简单的方法是使用此功能将菜单操作图标显示为禁用并使其功能也禁用:@OverridepublicbooleanonPrepareOptionsMe

c++ - 为什么不能将函数指针与没有显式 & 函数名称的模板函数进行比较?

考虑以下代码:voidfunc(int){}templatevoidtemplatedFunc(T){}intmain(){void(*p)(int)=func;booltest1=p==func;//booltest2=p==templatedFunc;//compilationerrorbooltest3=p==&templatedFunc;//butthisworks}如果您取消注释test2行并尝试使用g++编译代码,您将收到以下错误:test.cpp:Infunction‘intmain()’:test.cpp:8:21:error:assumingcasttotype‘vo

c++ - 如果成员具有非平凡的 noexcept 赋值运算符,则默认 move 赋值不能显式地为 noexcept

此代码使用gcc4.8.2(-std=c++11)编译失败,但使用clang3.4(trunk)(-std=c++11)编译:#include#includestructX{X&operator=(X&&)noexcept=default;//addingnoexceptthisleadstoanerroringcc,butworksinclang://function‘X&X::operator=(X&&)’defaultedonitsfirst//declarationwithanexception-specificationthatdiffersfromthe//implicit

c++ - 为什么在具有多个接口(interface)() 的对象中实现 QueryInterface() 时我需要显式向上转换

假设我有一个实现两个或多个COM接口(interface)的类:classCMyClass:publicIInterface1,publicIInterface2{};我看到的几乎所有文档都表明,当我为IUnknown实现QueryInterface()时,我明确地将this指针向上转换为其中一个接口(interface):if(iid==__uuidof(IUnknown)){*ppv=static_cast(this);//callAddref(),returnS_OK}问题是为什么我不能直接复制这个?if(iid==__uuidof(IUnknown)){*ppv=this;//

c++ - 为什么这需要一个显式的 std::move?

假设我有一个Foo包含std::vector的类由std::unique_ptrbuild另一个类的对象,Bar.typedefstd::unique_ptrUniqueBar;classFoo{std::vectorbars;public:voidAddBar(UniqueBar&&bar);};voidFoo::AddBar(UniqueBar&&bar){bars.push_back(bar);}这会导致编译错误(在g++4.8.1中)说std::unique_ptr的复制构造函数被删除,这是合理的。这里的问题是,既然bar参数已经是一个右值引用,为什么std::unique_p

c++ - 为什么成员变量被 "all automatic"捕获,而不是显式命名?

在C++11中(来自cppreference.com):[&]capturesallautomaticvariablesusedinthebodyofthelambdabyreferenceandcurrentobjectbyreferenceifexists还有……[a,&b]whereaiscapturedbycopyandbiscapturedbyreference所以我的问题是,如果我们有一个像(VERSIONA)这样的类:classFoo{public:voidtest(){autoy=[&](){returnx;}();//Line6}intx;};在第6行中,我们使用“所

c++ - 使用虚拟析构函数,我是否需要为每个子类显式声明一个虚拟析构函数?

我有一个场景,我正在编写一些深入的面向对象的代码,具有多层抽象基类,我想知道是否必须为每一个显式声明一个析构函数。编译器会生成一个已经是虚拟的默认值,还是我必须告诉它? 最佳答案 默认析构函数不是虚拟的。如果您将基类的析构函数声明为虚拟,则子类的析构函数将被覆盖,因此即使没有明确声明它们也是虚拟的。如果你有一个类层次结构并且你的基类没有声明析构函数是虚拟的,GNUGCC编译器甚至会给出警告,因为你很可能希望它是。 关于c++-使用虚拟析构函数,我是否需要为每个子类显式声明一个虚拟析构函数

c++ - 如果我使用显式构造函数,是否需要将关键字放在 .h 和 .cpp 文件中?

其实我的问题都在标题里了。无论如何:我有一个类,我使用显式构造函数:.hclassMyClass{public:explicitMyClass(conststring&s):query(s){}private:stringquery;}explicit关键字是否必须放在implementation(.cpp)文件中? 最佳答案 不,不是。explicit关键字只允许在header中使用。我的gcc说:test.cpp:6:error:onlydeclarationsofconstructorscanbe'explicit'以下代码:

c++ - 对 C++ 的哪些更改使复制初始化适用于具有显式构造函数的类?

考虑这段代码:structX{explicitX(){}explicitX(constX&){}};voidfoo(Xa=X()){}intmain(){}使用C++14标准,GCC7.1和clang4.0rejects代码,这是我所期望的。但是,使用C++17(-std=c++1z),theybothaccept编码。改变了什么规则?对于两个编译器都表现出相同的行为,我怀疑这是一个错误。但据我所知,最新的草案仍然说,默认参数使用copy-initialization1的语义。同样,我们知道explicit构造函数将只允许直接初始化2。1:dcl.fct.default/5;2:cla

c++ - 你更喜欢显式命名空间还是 C++ 中的 'using'?

在使用C++命名空间时,您是否更喜欢显式命名它们,如下所示:std::cout或者你更喜欢使用命名空间:usingnamespacestd;cout如果你更喜欢后者,你是在文件范围还是函数范围声明你的使用?就我个人而言,我更喜欢明确地命名它们——它更多的是打字,但是当使用混合命名空间(例如std和boost)时,我发现它更具可读性。 最佳答案 我总是使用明确的。写std不会伤害我,我清楚地看到它来自哪里。当您有一些遗留项目需要使用它自己的“字符串”、“vector”等来维护时,它会很有用。代码携带的信息越多越好。