Я пытаюсь использовать специализацию шаблонов, чтобы возвращать разные типы в зависимости от значения переменной шаблона.
Я перешел от попытки ветвиться во время выполнения, а не во время компиляции с использованием typeof()
, неспециализированнаяшаблоны и использование std::enable_if_t<>
.Я думаю, что это может быть связано с отсутствием понимания того, как разрешаются функции шаблона.
class Test
{
public:
template <typename T>
T request()
{
T ret = getVal<T>();
return ret;
}
private:
float foo = 2.f;
int bar = 1;
template <typename T>
typename std::enable_if<std::is_same<T, float>::value, bool>::type
getVal() { return foo; }
template <typename T>
typename std::enable_if<std::is_same<T, int>::value, bool>::type
getVal() { return bar; }
template<typename T>
T getVal()
{
std::cout << "T is type " << typeid(T).name() << std::endl;
throw std::bad_typeid();
}
};
int main()
{
Test t;
int i;
float f;
i = t.template request<int>();
f = t.template request<float>();
}
Я ожидаю, что это разрешит три разные функции, но я не уверен, что это так:
T Test::getVal()
int Test::getVal()
float Test::getVal()
Любая помощь будет принята с благодарностью.