История изменений
Исправление dissident, (текущая версия) :
А можно с примерами про два return'а с разными типами? Просто auto не заработает? Речь о чем-то вроде https://stackoverflow.com/questions/32885112/template-function-to-return-tupl... ?
Убрал decltype, в C++14 продолжает работать:
#include <iostream>
#include <string>
#include <tuple>
// IDs
enum class ID : size_t
{
AAA, // 0
BBB, // 1
CCC, // 2
DDD // 3
};
// default values for each ID
const auto defaultValsForIDs = std::make_tuple(
int(1), // 0
std::string("bbb"), // 1
double(3.5), // 2
int(-5) // 3
);
template<typename EnumT>
using underlayingEnumT = typename std::underlying_type<EnumT>::type;
template<typename EnumT>
constexpr underlayingEnumT<EnumT> to_underlying(EnumT e)
{
return static_cast<underlayingEnumT<EnumT>>(e);
}
template<typename EnumT, EnumT e>
auto getDefaultValue()
// -> decltype(std::get<to_underlying<EnumT>(e)>(defaultValsForIDs))
{
return std::get<to_underlying<EnumT>(e)>(defaultValsForIDs);
}
template<ID id>
auto getDefaultValForID()
// -> decltype(getDefaultValue<ID, id>())
{
return getDefaultValue<ID,id>();
}
int main()
{
std::cout << getDefaultValForID<ID::BBB>() << std::endl;
return 0;
}
Или речь о чем-то другом?
Исправление dissident, :
А можно с примерами про два return'а с разными типами? Просто auto не заработает? Речь о чем-то вроде https://stackoverflow.com/questions/32885112/template-function-to-return-tupl... ?
Убрал decltype, в C++14 продолжает работать:
#include <iostream>
#include <string>
#include <tuple>
// IDs
enum class ID : size_t
{
AAA, // 0
BBB, // 1
CCC, // 2
DDD // 3
};
// default values for each ID
const auto defaultValsForIDs = std::make_tuple(
int(1), // 0
std::string("bbb"), // 1
double(3.5), // 2
int(-5) // 3
);
template<typename EnumT>
using underlayingEnumT = typename std::underlying_type<EnumT>::type;
template<typename EnumT>
constexpr underlayingEnumT<EnumT> to_underlying(EnumT e)
{
return static_cast<underlayingEnumT<EnumT>>(e);
}
template<typename EnumT, EnumT e>
auto getDefaultValue()
// -> decltype(std::get<to_underlying<EnumT>(e)>(defaultValsForIDs))
{
return std::get<to_underlying<EnumT>(e)>(defaultValsForIDs);
}
template<ID id>
auto getDefaultValForID()
// -> decltype(getDefaultValue<ID, id>())
{
return getDefaultValue<ID,id>();
}
int main()
{
std::cout << getDefaultValForID<ID::BBB>() << std::endl;
return 0;
}
Исправление dissident, :
А можно с примерами про два return'а с разными типами? Просто auto не заработает? Речь о чем-то вроде https://stackoverflow.com/questions/32885112/template-function-to-return-tupl... ?
Исходная версия dissident, :
А можно с примерами про два return'а с разными типами? Просто auto не заработает? Речь о чем-то вроде https://stackoverflow.com/questions/32885112/template-function-to-return-tupl...