C++ equivalent for VB TypeOf operator?

B

Bob Altman

Hi all,

What's the C++ equivalent for the VB TypeOf operator. For example:

void ReportError(System::Exception^ ex)
{
// Psuedo-VB syntax
if (TypeOf ex Is System::OperationCanceledException) return;

// Decode the exception and tell the user about it...
<...>
}

TIA - Bob
 
C

Cholo Lennon

Bob said:
Hi all,

What's the C++ equivalent for the VB TypeOf operator. For example:

dynamic_cast (http://msdn.microsoft.com/en-us/library/cby9kycs.aspx)

The operator returns 0 (or nullptr in C++ CLI) if the convertion fails.
void ReportError(System::Exception^ ex)
{
// Psuedo-VB syntax
if (TypeOf ex Is System::OperationCanceledException) return;

// Decode the exception and tell the user about it...
<...>
}

The general pattern to use dynamic_cast is:

if (System::OperationCanceledException^ opCanEx = dynamic_cast<System::OperationCanceledException^>(ex)) {
// Use opCanEx
...
}



Regards
 
J

Jialiang Ge [MSFT]

Good morning Bob and Cholo

If you would like to handle System::OperationCanceledException and all the
subclasses of System::OperationCanceledException in the if statement, we
can use Cholo's suggestion of dynamic_cast:

if (dynamic_cast<System::OperationCanceledException^>(ex))
{
// if ex belongs to a subclass of System::OperationCanceledException, the
above if statement will still return true.
// Decode the exception and tell the user about it
}

If you would like to only handle System::OperationCanceledException and
disregard the subclasses of OperationCanceledException, the 'typeid'
keyword will be proper:
http://msdn.microsoft.com/en-us/library/kwd9abya.aspx

void ReportError(System::Exception^ ex)
{
if (ex->GetType() == System::OperationCanceledException::typeid)
{
// Decode the exception and tell the user about it
}
}

Please let me know whether the above information is helpful to you or not.
If you have any other questions/concerns, feel free to tell me.

Have a very nice day!

Regards,
Jialiang Ge ([email protected], remove 'online.')
Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

MSDN Managed Newsgroup support offering is for non-urgent issues where an
initial response from the community or a Microsoft Support Engineer within
2 business day is acceptable. Please note that each follow up response may
take approximately 2 business days as the support professional working with
you may need further investigation to reach the most efficient resolution.
The offering is not appropriate for situations that require urgent,
real-time or phone-based interactions. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
C

Cholo Lennon

Paavo said:
dynamic_cast only works on polymorphic pointers/references (i.e.
having at least one virtual function). While it's true that
std::exception is polymorphic, there might be other exception objects
which are not. In C++ it is possible to distinguish them, but only if
you know the types in advance.

You're right, but just a clarification: the OP asked about "TypeOf" with a .Net exception (not std::exception). BTW all .Net
exceptions are polymorphics.

Regards
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top