Эммы.назвать это что-то еще?например,
template<typename T>
const T& Parameters::getVector(const std::string& key)
{
Map::iterator i = params_.find(key);
std::vector<std::string> temp = boost::get<std::vector<std::string> >(i->second)
// T is already a vector
T ret; ret.reserve(temp.size());
for(int i=0; i<temp.size(); i++){
ret.push_back(boost::lexical_cast<typename T::value_type>(temp[i]));
}
return ret;
}
Вам нужно будет назвать это как:
foo.getVector<std::vector<int> > ("some_key");
Ничто в вашем вопросе не исключает этого.
Теперь, если вам действительно нужно использоватьget()
, тогда вам придется полагаться на частичную специализацию структуры, поскольку частичная специализация функции не поддерживается языком.
Это намного сложнее, например:
template <typename T>
struct getter
{
const T& operator()(std::string const& key)
{
// default operations
}
};
// Should double check this syntax
template <typename T>
struct getter<std::vector<T, std::allocator<T> > >
{
typedef std::vector<T, std::allocator<T> > VecT;
const VecT& operator()(std::string const& key)
{
// operations for vector
}
};
Тогда у вас метод становится:
template<typename T>
const T& Parameters::get(const std::string& key)
{
return getter<T>()(key); // pass the structures getter needs?
}