M
Matthias
Dear newsgroup.
I want to write a template function which accepts either integer or
floating point numbers.
If a certain result is not a whole number and if the template
parameter is an integer, it should return false, but it should work
normally if the parameter is a float.
To illustrate this, I attached a minimal example.
The background:
I have a variable (in this case "temp") holding the result of some
calculations and representing a time in milliseconds.
The output, however, shall be in seconds, and the function should only
return successfully if the value can be represented in seconds
(without any rounding).
The code example below does all that, but I wanted to know if there is
a better way to do it and if this code works on all systems.
Is it possible that the "if"-clause is optimized away?
I compiled it with gcc with the -O3 option and it still works.
Any comments?
cheers,
Matthias
======================================
#include <iostream>
template <typename T>
bool minimal(T& output)
{
T temp = 500; // change this value!
if (temp / 1000 * 1000 != temp) return false;
else output = temp / 1000;
}
int main()
{
int i;
if (minimal(i)) std::cout << "int works (" << i << ")!\n";
float f;
if (minimal(f)) std::cout << "float works (" << f << ")!\n";
}
I want to write a template function which accepts either integer or
floating point numbers.
If a certain result is not a whole number and if the template
parameter is an integer, it should return false, but it should work
normally if the parameter is a float.
To illustrate this, I attached a minimal example.
The background:
I have a variable (in this case "temp") holding the result of some
calculations and representing a time in milliseconds.
The output, however, shall be in seconds, and the function should only
return successfully if the value can be represented in seconds
(without any rounding).
The code example below does all that, but I wanted to know if there is
a better way to do it and if this code works on all systems.
Is it possible that the "if"-clause is optimized away?
I compiled it with gcc with the -O3 option and it still works.
Any comments?
cheers,
Matthias
======================================
#include <iostream>
template <typename T>
bool minimal(T& output)
{
T temp = 500; // change this value!
if (temp / 1000 * 1000 != temp) return false;
else output = temp / 1000;
}
int main()
{
int i;
if (minimal(i)) std::cout << "int works (" << i << ")!\n";
float f;
if (minimal(f)) std::cout << "float works (" << f << ")!\n";
}