是否有C#x2B的类似物+;std::是同一个类模板吗? 在C++中,某人可以编写以下代码: #include <type_traits> template <typename Type1, typename Type2> bool TestArgumentTypesOnEquality(Type1 argument1, Type2 argument2) { return std::is_same<Type1, Type2>::value; }
当然,只有简单的测试样本。真正的代码更复杂。事实上,我只想知道,在C++中,是否可以测试两个泛型类型的参数。 < p>我不熟悉C++,但是C语言对象(引用)相等和值相等有两种类型的相等。值相等检查结构属性的基础值,引用相等检查引用类型的“指针”,查看它们是否指向同一对象引用是否有C#x2B的类似物+;std::是同一个类模板吗? 在C++中,某人可以编写以下代码: #include <type_traits> template <typename Type1, typename Type2> bool TestArgumentTypesOnEquality(Type1 argument1, Type2 argument2) { return std::is_same<Type1, Type2>::value; },c#,c++,generics,equality,typetraits,C#,C++,Generics,Equality,Typetraits,当然,只有简单的测试样本。真正的代码更复杂。事实上,我只想知道,在C++中,是否可以测试两个泛型类型的参数。 < p>我不熟悉C++,但是C语言对象(引用)相等和值相等有两种类型的相等。值相等检查结构属性的基础值,引用相等检查引用类型的“指针”,查看它们是否指向同一对象引用 要检查两个对象是否是相同的类型(但不是相同的引用或相同的值),请使用Assert(object1.GetType()==object2.GetType())C#没有很多编译时功能,例如模板、宏、静态_Assert。C#泛型几
要检查两个对象是否是相同的类型(但不是相同的引用或相同的值),请使用Assert(object1.GetType()==object2.GetType())C#没有很多编译时功能,例如模板、宏、
静态_Assert
。C#泛型几乎是运行时的。C++模板绝对是编译时间。编译器时间类型确定机制,如std::is_same
,std::enable_(如果在C中不起作用)。您可以根据反射对象做出决定:
if (typeof(Type1) == typeof(Type2)) ...
通常,泛型代码意味着不知道也不关心关于类型的任何具体内容。当然,如果情况允许,您可以偏离该规则。Type1==类型2
?@juharr OK。编译时机制呢?泛型不是模板。因此,它们不会在编译时更改。我不确定您是否想要我提到的内容,或者可能想要argument1.GetType()==argument2.GetType()
区别在于调用TestArgumentTypesOnEquality(1,(object)2)
对于GetType
是真的,但是对于typeof
@juharr是的,我理解。我想要的正是你提到的。但是遗憾的是,没有编译时机制。泛型本身就是编译时机制的一个例子,不是吗?不,当你用泛型编译东西时,它不会像模板那样进行替换。它创建了一些具有元数据的内容,这些元数据指示存在类型参数。查看这个讨论它的链接您不能只将对象传递给类型名和泛型类型参数。如果您有对象,那么您需要object1.GetType()==object2.GetType()
.Oops-这是一个很好的位置,也很好的更正。诅咒我的草率打字。
if (typeof(Type1) == typeof(Type2)) ...