gpt4 book ai didi

c++-cli - C++/CLI-问题: Is there an equivalent to the C# "is" keyword or do I have to use reflection?

转载 作者:可可西里 更新时间:2023-11-01 08:13:45 27 4
gpt4 key购买 nike

我在 MSDN 的某个地方读到过,与 C# 的“is”关键字等效的是 dynamic_cast,但这并不完全等效:它不适用于值类型或泛型参数。例如在 C# 中我可以写:

void MyGenericFunction<T>()
{
object x = ...
if (x is T)
...;
}

如果我尝试“等效的”C++/CLI:

generic<class T>
void MyGenericFunction()
{
object x = ...
if (dynamic_cast<T>(x))
...;
}

我收到编译器错误“error C2682: cannot use 'dynamic_cast' to convert from 'System::Object ^' to 'T'”。

我唯一能想到的就是使用反射:

if (T::typeid->IsAssignableFrom(obj->GetType()))

有没有更简单的方法来做到这一点?

最佳答案

它在 MSDN 上:

How to: Implement is and as C# Keywords in C++

简而言之,您需要像这样编写一个辅助函数:

template < class T, class U > 
Boolean isinst(U u) {
return dynamic_cast< T >(u) != nullptr;
}

并这样调用它:

Object ^ o = "f";
if ( isinst< String ^ >(o) )
Console::WriteLine("o is a string");

关于c++-cli - C++/CLI-问题: Is there an equivalent to the C# "is" keyword or do I have to use reflection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049984/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com