草庐IT

java - 这个Java方法调用的歧义在哪里?

我收到一个我不理解的“对make的引用不明确”的编译器错误。我有这两种方法publicstaticTmake(Stringname,ClassparentClass,booleanrethrowRuntimeExceptions,Object...params)throwsDLExceptionpublicstaticTmake(Stringname,ClassparentClass,Object...params)throwsDLException这行代码被标记为不明确StringclassName="clsNme";Stringone="1";Stringtwo="2";Simpl

c++ - 使用 SFINAE 原理时重载函数有歧义

我遇到了一些用VS7.1编写的代码,现在我正试图让它在MacOSX上工作。我理解的下面的代码片段关于SFINAE原则。据我了解,代码用于在编译时通过依赖一些模板实例化魔法来知道什么类型。简而言之,通过查看模板参数来选择正确的重载。这是我的代码。稍微简化以仅显示问题。templatestructSomeClass{};templatestructSomeClass{typedefcharType;};templatestructIsChar{typedefcharYes;typedefintNo;templatestaticYesSelect(U*,typenameSomeClass::

C++ SFINAE enable_if_t 在成员函数中,如何消除歧义?

假设我们有一些SFINAE成员函数:classfoo{template::value,S>voidbar(S&&s);template::value,S>voidbar(S&&s);}如果我们像上面那样声明,那么我们如何定义它们呢?他们的两个函数签名看起来像:templateinlinevoidfoo::bar(S&&s){...dosomething...}我见过返回std::enable_if_t的示例喜欢:templateautobar(S&&s)->std::enable_if_t::value,S>(...){...dosomething...}根据返回类型消除歧义。但我不想

c++ - 多重继承虚拟调用歧义

手头的问题很难描述,所以代码放在前面以便更清楚。structBase{intb;virtualvoidfoo(){cout假设在一些奇怪的情况下,我想要一个基类MultiInheritance有两个基类Derived1和Derived2公共(public)非虚拟基类Base。MultiInheritance中有两个Base,如何在MultiInheritance中指定要访问哪个Base类>?上面的代码似乎通过多次强制转换可以正常工作,但我不确定这是否是已定义的行为。如果是,编译器如何实现它来满足多态性的需要?一方面,virtual调用都应该产生相同的virtual函数表,但另一方面,如

C++ 重载:字符串文字与 boost::function 歧义

我的问题代码:#include#includevoidfunc(conststd::string&){}voidfunc(constboost::function&){}intmain(){func(main);//goodfunc("bad");return0;}=>error:callofoverloaded‘func(constchar[4])’isambiguousoverload.cpp:4:note:candidatesare:voidfunc(conststd::string&)overload.cpp:5:note:voidfunc(constboost::functi

c++ - 使用基类的静态函数而不指定参数以避免歧义

我的一些基类获得大量参数。现在我想指定使用哪个静态函数:templatestructSBase{staticvoidfunc(){}};structA:publicSBase{};structB:publicA,publicSBase{//usingSBase::func;//Notpossible.//Horrible,butworks.usingSBase::func;};如您所见,我需要将模板参数写两次,导致代码重复。有什么办法可以摆脱它吗? 最佳答案 你可以使用typedef:typedefSBaseB_SBase;stru

C++异常继承歧义

为什么会这样?#include#include#include#includestructfoo_error:virtualboost::exception,publicstd::runtime_error{explicitfoo_error(constchar*what):std::runtime_error(what){}explicitfoo_error(conststd::string&what):std::runtime_error(what){}};structbar_error:virtualboost::exception,publicstd::runtime_erro

c++ - 可变函数模板中的歧义

我最近开始尝试各种模板技巧。在这种情况下,我尝试实现一个类,该类包含由使用参数包的可变参数模板提供的数字序列。但是,我遇到了一些问题,这些问题不会发生在我使用的编译器(IntelC++14)上,但发生在其他编译器上,例如CLang>或海湾合作委员会。因此,我很困惑哪个编译器在对标准的解释上“更准确”。这是我的代码:#includeusingnamespacestd;templateclassCSequence{public:CSequence(){this->generate();this->out();}private://Recursionendtemplatevoidgenera

c++ - const最佳匹配函数与其他函数之间的歧义

让我们考虑以下示例:#include#if1structX{};structO{O(X){;}};#elsestructO{};structX{operatorO(){return{};}};#endifstatic_assert(std::is_convertible::value);structS{voidf(X)const{;}voidf(O){;}};#includeintmain(){Ss;s.f(X{});returnEXIT_SUCCESS;}Liveexample报错:error:calltomemberfunction'f'isambiguous当我删除const-q

c++ - 构造对象的歧义

这个问题在这里已经有了答案:Whydoesn'tthisenumconverttoint?(3个答案)关闭4年前。这是我写的一个例子:structFoo{Foo()=default;Foo(int){};};intmain(){intbaz=10;Foo(1);//OKFoo(baz);//Fails,redefinitionreturn0;}为什么Foo(baz)尝试构造一个新对象baz,而不是构造一个将参数baz传递给构造函数的匿名对象?当我通过编写Foo(bar)声明一个对象bar时,我得到一个默认的初始化对象就好了,但是一旦我尝试传递一个参数,它就会失败。歧义是如何解决的?