Возврат определённого типа значинеия функцией в зависимости от типа аргумента
Возможно ли вернуть определённый тип значения функции в зависимости от типа аргумента без использования перегрузки функции? Вот пример:
#include <string>
#include <iostream>
#include <typeinfo>
#include <cmath>
using namespace std;
template <typename T>
string f_d(T num)
{
if (typeid(num).name() == typeid(int).name())
{
string res;
return string(res.crbegin(), res.crend());
}
else if (typeid(num).name() == typeid(string).name())
{
unsigned int res;
return res;
}
}
Функция должга возвращать string, если тип аргумента int и unsigned int, если тип аргумента string
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Используя 17 плюсы - конечно можно
#include <string>
#include <iostream>
#include <typeinfo>
#include <cmath>
using namespace std;
template <typename T>
typename std::conditional<std::is_same<T, int>::value, std::string, unsigned int>::type f_d(T num)
{
if constexpr (std::is_same<T, int>::value)
{
string res = "test";
return string(res.crbegin(), res.crend());
}
if constexpr (std::is_same<T, std::string>::value)
{
unsigned int res = 1;
return res;
}
}
int main()
{
std::cout << f_d(1) << "\n";
std::cout << f_d(std::string("data")) << "\n";
}
если же не, тогда придется использовать в качестве возвращаемого значения std::variant<string, unsigned int>, хотя это тоже 17:) (но всегда есть буст).
P.S. А зачем так могло понадобиться? просто интересно, может есть решение попроще.