Вы можете использовать SFINAE как:
template <typename T,
typename std::enable_if<std::is_same<T, int>::value>::type* = nullptr>
int get() const {
return getInt();
}
template <typename T,
typename std::enable_if<std::is_same<T, short>::value>::type* = nullptr>
short get() const {
return getShort();
}
Затем в классе Proxy
вызовите вышеуказанные функции, такие как:
operator int() const {
return myOwner->get<int>();
}
operator short() const {
return myOwner->get<short>();
}
и в основной функции:
int i = m.get<int>();
short s = m.get<short>();
Демо
ПРИМЕЧАНИЕ : тот факт, что возвращаемое значение функции присваивается int
или short
, не используется в параметре шаблона вычет.