overload-resolution相关内容
考虑下面的代码: public class Tests { public void Test() { Assert.AreEqual(“Int”,DoSomething(1)); public static string DoSomething(T value) { return“Generic”; } public static string
..
我试图将Java 7代码迁移到Java 8,所以我的代码类似于: package test ; import java.util.Arrays; import java.util.Map; public class Tests { private static interface ComparableMap扩展Map,Comparable {}
..
代码示例: 接口IFoo {} class FooImpl:IFoo {} static void Bar(IEnumerable value) 其中T:IFoo { } static void Bar(T来源) 其中T:IFoo { } Can有人解释,为什么这个方法调用: var value = new Fo
..
下面的程序不能编译,因为在错误行中,编译器选择带有单个 T 参数的方法作为分辨率,因为 List 不符合单个 T 的通用约束。编译器不承认有另一种方法可以使用。如果我删除单个 T 方法,编译器将正确地找到许多对象的方法。 我读过两篇关于泛型方法解析的博文,一篇来自JonSkeet 这里,但我找不到解释或解决问题的方法。 很明显,有两种名称不同的方法可以工作,但我喜欢这种情况下您
..
当回答关于使用枚举的重载解析问题时,出现此问题 虽然 long long 的情况绝对是MSVC2012NovCTP中的错误(根据标准文本和gcc 4.7.1的测试),我不知道为什么会发生以下行为: #include
..
如何获取重载的函数/过程/方法的所有地址位置? 例如,Dialogs.MessageDlgPosHelp重载有两个不同版本的 - 一个没有默认按钮,一个没有。如何获取这两个函数的地址位置? 解决方案 根据 这个线程 以及什么 Thomas Mueller 指出,您可能会定义与要获取的地址(每个重载)的方法相同的签名类型。如果然后声明这些类型的变量并给它们分配方法指针,那么您将确保编译
..
重载函数时: void add(int a) { a = 7; cout
..
我有一个程序,我有很多嵌套的if / switch语句,在几个地方重复。我试图提取出来,并把开关放在一个模板方法类,然后允许客户端重载他们想要使用重载特别处理的开关分支: class TraitsA {}; class TraitsB:public TraitsA {}; class Foo { bool traitsB; public: //在运行时确定Foo是否
..
因此,我尝试将 xorshift PRNG作为参数化的STL样式类从 random ,例如 std :: mersenne_twister_engine ,所以我可以使用它从那些非常方便的分发从随机库等。 > 无论如何,我有一个重载运算符 stumped。 类的参数化如下:
..
当我们将(多)派生类传递给期望基类的模板函数时,模板实例化的规则是什么?例如: #include template struct C {}; struct D:C 0,C 1 {}; template void f(const C& y){std :: cout
..
如何转储函数调用的候选函数(或可行函数或最佳可行函数)? 我知道g ++提供了选项转储类层次结构。 (事实上,Visual Studio 2010提供了一个类似的选项,但它没有记录,我记得读一些关于它 - 也许在VC ++团队博客,但我不记得清楚。) 最近,我一直在阅读关于C ++ 0x草案中的重载解析,它真的让我很尴尬。 有没有任何编译器提供一个选项转储候选函数,可行函数或
..
工作示例1:没有命名空间 p> class C {}; inline void overloaded(int){} template void try_it(T value){ overloaded(value); } inline void overloaded(C){} int main() { try_it(1)
..
#include struct A {}; struct B:public A {}; template void foo(const T& x){std :: cout
..
正如我先前问过的问题显而易见的, 重载分辨率,模板和继承,将在需要基于转换的过载之前选择模板重载。 但是,有一种方法提供回退超载,只有选择作为绝对最后的手段,如果没有其他匹配的东西?在这种特殊情况下,可以使用 enable_if ,但不可扩展。不幸的是。 p> //我的库有这个,并且不知道foo可能的重载 template
..
我有一个奇怪的行为与操作符重载在C + +。我有一个类,我需要检查其内容是否大于或等于长双。我重载了> =运算符来做这个检查,我的声明如下: bool MyClass :: operator> = double value)const; 我不得不说我对我的类有一个cast-to-long-只有在某些条件下才能工作。 现在,当我使用这个运算符时,编译器会抱怨使用opera
..
我有一个奇怪的行为与操作符重载在C + +。我有一个类,我需要检查其内容是否大于或等于长双。我重载了> =运算符来做这个检查,我的声明如下: bool MyClass :: operator> = double value)const; 我不得不说我对我的类有一个cast-to-long-只有在某些条件下才能工作。 现在,当我使用这个运算符时,编译器会抱怨使用opera
..
在他的回答 此问题和评论部分, Johannes Schaub 说,有一个“匹配错误”,当尝试对需要比已经传递的参数更多的参数的模板类型扣除: template(int,int)不可行 另一个问题,相关的是函数模板的类型扣除是否成功(并且发生替换):
..
我想知道如何获取此代码编译: // test3.cpp #include using namespace std; template R universal_exer(R(* f)(rArgs ...),rArgs ... args) { return(* f)(forwa
..
这是我的(剥离)类和一个对象的实例化: template > 类Carray { typedef typename Allocator :: size_type size_type; // ... 显式Carray(size_type n,const T& valu
..
我想知道如何获取此代码编译: // test3.cpp #include using namespace std; template R universal_exer(R(* f)(rArgs ...),rArgs ... args) { return(* f)(forwa
..