Прямо сейчас у меня есть что-то вроде этого:
int a = getVal<int>("key1");
double b = getVal<double>("key2");
где getVal() просто отличает и возвращает значение, соответствующее ключу. Можно ли превратить это в это:
int a = getVal("key1");
double b = getVal("key2");
Это не огромная разница в коде, но мне в основном просто интересно, возможно ли это. Спасибо за помощь.
Что-то вроде этого:
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);
}
getVal("key1", a);
будет ближе всего вы можете получить.Integer a = getVal<>("key1");
, В C ++ выражение с правой стороны определяет тип overral, поэтому вы должны указать его явно (например, через поддельный дополнительный параметр, как подсказывает @chris).