Is there a way to determine whether a variable is of an arithmetic type or not?
- arithmetic: integer, floating point numbers, boolean values
- not arithmetic: pointers, references; e.g. strings, and probably all other implementation- and user-defined types. However if someone for some reason defines
typedef int myInt
myInt
should be considered arithmetic as well (because it is!)
In a normal C++ program I could use std::is_arithmetic<T>::value
, where T
is the type I need to check, but this doesn't seem to work in the Arduino environment. (Am I wrong? If it works, could someone please tell me how to use it?)
I imagine I could make a list of allowed types, e.g. as described in this answer to a similar question (I'm referring to the second option, the Alternative). But given that I don't need to exactly know the type of T
I was wondering whether there is a more elegant and flexible solution...
1 Answer 1
Is there a way to determine whether a variable is of an arithmetic type or not?
no. end of the day, those are just bit pieces and it only makes sense to the computer with the right context. Another way to put it, the same bit pieces can and will mean different things under different situations.
-
I know that reading 4 bits representing a float as a long will give a valid but meaningless value. But the computer must somehow know how to interpret those bits, right? Either at compiletime or at runtime the type of each variable/set of bits must be known, and the property arithmetic/not arithmetic must also be known somehow: don't I get an error message if I try to do
myClass + aString
? (btw., may this be a solution to my problem? Try do do some arithmetics on the variables passed by the caller and output an error if it isn't possible to do so? Could that work, and if yes what could be...noearchimede– noearchimede2017年08月18日 19:19:49 +00:00Commented Aug 18, 2017 at 19:19 -
...an elegant implementation? (I mean, an error like "unable to do myclass+astring" wouldn't be very clear to someone who doesn't know the implementation of the function he is calling)noearchimede– noearchimede2017年08月18日 19:21:28 +00:00Commented Aug 18, 2017 at 19:21
print()
etc. And you would only need to overload for the types you actually want to handle - then other types that don't "add up" you would just get a compilation error.