I have struct like this
template <typename T>
struct container
{
T norm() const
{
T sum = 0;
for (unsigned int i = 0; i < length; i )
{
sum = value[i];
}
return sum;
};
private:
T *value{nullptr};
unsigned int length{0};
};
I have a norm() method that adds all the values from the "value". I need to write this method so that it can add numbers and concatenate strings, characters. The question is that I do not understand how to determine what type of variable is passed and how to set the type for the "sum" I thought to determine the size of the first element and determine the type of the variable from it, but maybe there is a better method?
CodePudding user response:
To initialize a T
, the way to do that in the template function is to use the brace-initializer:
T sum = {};
This will initialize sum to whatever the type T
would be equal to if you default construct (for classes such as std::string
) or value-initialize (for types such as int
, double
, etc.). For integer types, double
, float
, it is 0. For std::string
it would be an empty string, etc.
After taking another look at your norm
function, the following should also give the same results (not tested):
template <typename T>
T norm() const
{
return std::accumulate(value, value length, T{}, std::plus<T>());
}