Есть ли способ автоматически выбирать между несколькими нешаблонными функциями на основе параметра шаблона?
Пример:
class Aggregate
{
public:
std::string asString();
uint32_t asInt();
private:
// some conglomerate data
};
template <typename T>
T get(Aggregate& aggregate)
{
// possible map between types and functions?
return bind(aggregate, typeConvert[T])(); ??
// or
return aggregate.APPROPRIATE_TYPE_CONVERSION();
}
Решение было бы неплохо выдать ошибку компилятора, если нет доступного хорошего преобразования, т.е.
get<double>(aggregate); // compile error
Я не хочу использовать специализацию шаблона, т.е.
template<>
int get(Aggregate& aggregate)
{
return aggregate.asInt();
}
потому что это приводит к дублированию кода, когда ваша функция get() имеет более одной строки кода