Предположим, у меня есть такой класс:
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
— это новая функция языка. Я просто не понимаю, почему он был разработан, чтобы не работать с частными переменными.