次のようなクラスがあるとします。
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'はprivateであると教えてくれます。
だから私はこのようなものを使わなければならないことになります:
std::remove_reference<decltype(std::declval<Foo>().get_bar())>::type clone_of_bar;
これは機能しますが、完全な混乱のように見えます。たぶんそれを行うためのより簡単な方法があります。よくわかりません。しかし、私が本当に知りたいのは、なぜ私が単に使用できないのかということdecltype(Foo::bar)
です。なぜ誰もbar
がプライベートを気にする必要がありますか?実際に変数にアクセスしているわけではありません。
decltype
言語の新機能です。なぜそれがプライベート変数で動作しないように設計されているのか理解できません。