Предположим, что у меня есть класс:
class Foo
{
std::vector<int> bar;
public:
std::vector<int>& get_bar() { return bar; }
};
и позже, я хочу другую переменную где-то еще, которая имеет тот же тип, что и bar
. Для меня было бы разумно, если бы я мог это сделать:
decltype(Foo::bar) clone_of_bar;
Но это не работает. Компилятор сообщает мне: std::vector <int> Foo:: bar 'является закрытым.
Итак, мне нужно использовать что-то вроде этого:
std::remove_reference<decltype(std::declval<Foo>().get_bar())>::type clone_of_bar;
Что работает, но выглядит как полный беспорядок. Может быть, есть более простой способ сделать это; Я не совсем уверен. Но я действительно хочу знать, почему я не могу просто использовать decltype(Foo::bar)
. Почему кому-то нужно, чтобы bar
был закрыт? Это не похоже на то, что я действительно обращаюсь к переменной.
decltype
- новая функция языка. Я просто не понимаю, почему он был разработан, чтобы не работать с частными переменными.