Почему нельзя использовать decltype для закрытых переменных-членов?

Предположим, у меня есть такой класс:

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' is private.

Так что мне приходится использовать что-то вроде этого:

std::remove_reference<decltype(std::declval<Foo>().get_bar())>::type clone_of_bar;

Это работает, но выглядит как полный беспорядок. Может быть, есть более простой способ сделать это; Я не совсем уверен. Но что я действительно хочу знать, так это почему я не могу просто использовать decltype(Foo::bar). Почему кого-то должно волновать, что барявляется частным? Это не похоже на то, что я на самом деле обращаюсь к переменной.

decltype— это новая функция языка. Я просто не понимаю, почему он был разработан, чтобы не работать с частными переменными.

12
задан karadoc 7 June 2012 в 00:37
поделиться