Параметр шаблона на основе ожидаемого типа возвращаемого значения

0

Прямо сейчас у меня есть что-то вроде этого:

int a = getVal<int>("key1");
double b = getVal<double>("key2");

где getVal() просто отличает и возвращает значение, соответствующее ключу. Можно ли превратить это в это:

int a = getVal("key1");
double b = getVal("key2");

Это не огромная разница в коде, но мне в основном просто интересно, возможно ли это. Спасибо за помощь.

  • 2
    getVal("key1", a); будет ближе всего вы можете получить.
  • 0
    если это будет Java, то вы можете использовать что-то вроде Integer a = getVal<>("key1"); , В C ++ выражение с правой стороны определяет тип overral, поэтому вы должны указать его явно (например, через поддельный дополнительный параметр, как подсказывает @chris).
Теги:

1 ответ

4
Лучший ответ

Что-то вроде этого:

template <typename T>
T getVal(const string& key);  // as before

class ValProxy {
private:
  ValProxy(const string& key) : key_(key) {}
  string key_;

  friend ValProxy getVal(const string& key);
public:
  template <typename T>
  operator T() const {
    return getVal<T>(key_);
  }
};

ValProxy getVal(const string& key) {
  return ValProxy(key);
}
  • 0
    Похоже, это будет работать. Также научил меня кое-чему о назначении и использовании операторов приведения. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню