• 9
• 10
• 9
• 10
• 10

# Inline Variant Switch? Macro/Function?

This topic is 697 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I've recently begun my first dealings with a variant type. My only gripe with the pattern is that I would need to create a switch anywhere I use it to select the right data member from the union. I was going to make a macro as it would evade running code every time I go to use the data, but then quickly realized that was doomed to failure due to being a preprocessor directive in the first place. Although I could just implement all the data selection code within the macro every time I need to use it, or use auto assignment with the macro. auto p = myvariant.MacroGetData(); However then the issue is how to get the macro to compile inline at all. So then perhaps I could pass in a variable to the macro to assign the correct data to, but then how do I know what variable type to create.

I am having some difficulty thinking of a solution, if one even exists.

Has anybody encountered a variant type which simplifies the data selection down to a function-like call to be made inline?

##### Share on other sites

Usually I try to write code that already knows the type of data it's dealing with. So, at compile-time the type is known and just be directly casted. If the type is not known at compile-time then a run-time solution must be used, which means some kind of small performance hit (perhaps negligibly small). Usually this would be called run-time polymorphism. Good example of compile-time polymorphism is function overloading, or C++ templates (and template specialization), or any other code-generation tool.

Some options to implement run-time polymorphism come to mind:

• function pointers for polymorphism
• switch statements
• jump table (enums/function pointers/virtual dispatch)

So I'd recommend trying to make sure a compile-time option will not work for you. If not then look into using some kind of run-time method. Good candidates for run-time polymorphism are pieces of code that do a common algorithmic task, but can operate on different kinds of data:

• Serializing data
• Settor/Gettor for member variables
• Conversions from one type to another
• etc.

So then we could write something like:

var a = 10;
var b = 12.0f;

printf( "%s/n", a.ToString( ) ); // "10"
printf( "%s/n", b.ToString( ) ); // "10.000000f"


Where ToString can be a polymorphic procedure. Inside of ToString we can use switches, or a jump table, or any other means of implementing polymorphism at run-time.

Edited by Randy Gaul