enum как тип возвращаемого значения функции в C ++ - PullRequest
0 голосов
/ 11 ноября 2011

Следующий Java-метод возвращает ключи хеш-таблицы в качестве перечисления.

Hashtable<String, Object> props = new Hastable<String, Object>(); 

// some code here

public final Enumeration getPropertyURIs() {
    return props.keys();
}

Я хочу перевести этот код на C ++.

В частности, как я могу реализовать ту же функцию в C ++, которая возвращает перечисление ключей std :: map?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Самое близкое, что вы можете получить, это вернуть итератор.Проблема в том, что вам действительно нужны два итератора для определения диапазона.Одним из способов обойти это является использование итератора вывода:

template<class output_iterator_type>
void getPropertyURIs(output_iterator_type out) {
    // loop copied from @dalle
    for (props_t::const_iterator i = keys.begin(); i != keys.end(); ++i)
    {
        *out = i->first;
        ++out;
    }
}

Если вы хотите сохранить все ключи в vector, вы можете сделать это следующим образом:

std::vector<std::string> keys;
getPropertyURIs(std::back_inserter(keys));
0 голосов
/ 11 ноября 2011

enum в C ++ - это просто набор констант.

Возможно, вы имеете в виду нечто подобное?

typedef std::unordered_map<std::string, boost::any> props_t;
props_t props;

std::vector<std::string> getPropertyURIs()
{
   std::vector<std::string> keys;
   for (props_t::const_iterator i = props.begin(); i != props.end(); ++i)
   {
      keys.push_back(i->first);
   }
   return keys;
}
...