Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#泛型相当于C++;模板专门化/隐式构造函数 有没有方法用C++的泛型和/或RTTI?< /P>来模拟C++模板特化?_C#_C++_Templates_Generics_Implicit Constructor - Fatal编程技术网

C#泛型相当于C++;模板专门化/隐式构造函数 有没有方法用C++的泛型和/或RTTI?< /P>来模拟C++模板特化?

C#泛型相当于C++;模板专门化/隐式构造函数 有没有方法用C++的泛型和/或RTTI?< /P>来模拟C++模板特化?,c#,c++,templates,generics,implicit-constructor,C#,C++,Templates,Generics,Implicit Constructor,考虑以下功能,实现细节无关紧要: public void DrawShape(Shape sh, Brush brush1, ...) { ... } public void DrawShape(Shape sh, Func<Brush> brushGetter1, ...) { ... } 这里的主要假设是将发生自动类型推断,并允许我跳过泛型参数。请注意,这不是一个有效的C代码,虚构的 < /> >运算符是我正在寻找的特征——将两个类型匹配到一个参数,可能没有任何显式的用户输入。

考虑以下功能,实现细节无关紧要:

public void DrawShape(Shape sh, Brush brush1, ...) { ... }
public void DrawShape(Shape sh, Func<Brush> brushGetter1, ...) { ... }

这里的主要假设是将发生自动类型推断,并允许我跳过泛型参数。请注意,这不是一个有效的C代码,虚构的<代码> < /> >运算符是我正在寻找的特征——将两个类型匹配到一个参数,可能没有任何显式的用户输入。< /P>你能在C++中显示原始/等效代码吗?一对构造函数,如:<代码>包装器(const刷子和B);<代码>和
包装(const Brushtter和bg)然后我可以有
DrawShape(const-Shape&s,Wrapper-w1,…)隐式构造函数的等价物是
运算符隐式
。C#与模板专门化没有等价物。泛型远远不如模板强大(尽管泛型可以在运行时合成这一事实可以实现一些非常酷的用途以及更快的编译,但这与使用非类型模板参数和专门化不同)@BenVoigt我不知道我怎么会错过这一功能。我非常确定这只能显式地完成,反之亦然(所以笔刷将实现转换,这与实际情况不太一样)。好的,这基本上解决了我的问题-如果你能把这个作为一个答案,我可能会接受它,这样问题就结束了。谢谢。@noisycat:这可能是你问题的答案,但不是你实际问的问题的答案。您可能会更改标题并改写问题的开头,使其同时具有两种备选方案(泛型和包装),然后将您尝试使用泛型的内容引入现有内容。然后我可以写下答案,隐式转换到包装器很简单而且有效。
public void DrawShape<TBrush1, ...>(Shape sh, TBrush1 brush1, ...) 
    : where TBrush1 : Brush|Func<Brush>, ... { ... }