Fair and simple: How do I check if anything else but an integer is passed to my class in c++?
If I pass f.e. a char 'a'
my class gets number 97
in ascii.
I tried std::numeric_limits
but I don't get why it is not detecting integers:
#include <iostream>
#include <limits>
class integerCheck
{
public:
integerCheck(int value)
{
if((value != std::numeric_limits<int>::is_integer))
return;
std::cout << value << std::endl;
}
};
int main()
{
integerCheck valInt(88);
integerCheck valChar('a');
integerCheck valFloat(13.44f);
return 0;
}
I found this Post working with std::enable_if
but I can't imagine there is no way to detect wrong input even in c++20 but wrapping everything in a template.
What am I missing, what should I look/search for to detect anything but an integer value? Thanks upfront
Delete the constructor taking char
s and make the ctor explicit
to prevent accepting float
s as follows
class integerCheck
{
public:
explicit integerCheck(int value)
{
std::cout << value << std::endl;
}
integerCheck(char ) = delete;
};
This doesn't allow the two following ctors to compile
integerCheck valChar('a');
integerCheck valFloat(13.44f);
I think the following will be better to prevent all of types except int
.
class integerCheck
{
public:
explicit integerCheck(int value)
{
std::cout << value << std::endl;
}
template<class T>
integerCheck(T ) = delete;
};
Notice that the past code doesn't prevent the est of the integral types like long
, size_t
, short
, ...