ページ 11

インテリセンスにprivate変数を表示させないようにしたい

Posted: 2017年7月27日(木) 14:27
by sadora3
タイトルにもある通り、インテリセンスにprivate変数を表示させないようにしたいです。
コンパイラ:VisualStudio2010
言語:C++
OS:Windows10

例えば、下のようなクラスがあったとします。

コード:

class TEST{
private:
	int aaa;
	float bbb;
	char ccc[256];
public:
	void F();
	int F2();
};
そして、どこかのローカルスコープで、

コード:

Test.
と書き、Ctrl + Spaceを押すと、インテリセンスが表示されますよね。
しかし、このままだと、「aaa」「bbb」「ccc」「F()」「F2()」が表示されてしまいます。
これをVisualStudioの設定、もしくはTESTクラスの実装方法の変更により、「F()」と「F2()」の表示のみにしたいです。
どうすれば、上記のことを実現できるのでしょうか?

質問はもう一つあります。
privateに存在する変数は、そもそもアクセス権限がないわけですから、扱えない(使う必要が無い)じゃないですか。
それなのに、どうしてインテリセンスは表示してくるのでしょうか?
どう考えても、無駄な気がします。

Re: インテリセンスにprivate変数を表示させないようにしたい

Posted: 2017年7月27日(木) 15:59
by purin52002
>>しかし、このままだと、「aaa」「bbb」「ccc」「F()」「F2()」が表示されてしまいます。
これをVisualStudioの設定、もしくはTESTクラスの実装方法の変更により、「F()」と「F2()」の表示のみにしたいです。
どうすれば、上記のことを実現できるのでしょうか?

Pimplイディオムでググると幸せになれるかもしれません。
(それでも隠蔽用の変数は見えてしまうけれども)

もう片方の質問については私の知識不足によりお答えできません^^;

Re: インテリセンスにprivate変数を表示させないようにしたい

Posted: 2017年7月27日(木) 16:31
by keito94
オフトピック
また、マニアックな質問をww

Re: インテリセンスにprivate変数を表示させないようにしたい

Posted: 2017年7月27日(木) 17:25
by ISLe
sadora3 さんが書きました:privateに存在する変数は、そもそもアクセス権限がないわけですから、扱えない(使う必要が無い)じゃないですか。
それなのに、どうしてインテリセンスは表示してくるのでしょうか?
どう考えても、無駄な気がします。
TEST::F()やTEST::F2()の定義の中ではアクセス権があるのに表示されないと困るのではないでしょうか?

でもそれを実現しようとするとコンパイル時の文法解析と同等の処理が必要。
処理コストがかかるので実現していないのではないでしょうか。
コンマ数秒でもキーボードから単語入力するたびに待たされたらイライラしてブチ切れる気がします。

ちなみにVisual Studio 2017では、IDEの設計が見直されて、インテリセンスも、sadora3さんが期待するような、アクセス可能なものしかデフォルトで表示されない仕様になってます。

Re: インテリセンスにprivate変数を表示させないようにしたい

Posted: 2017年7月27日(木) 23:53
by sadora3
>>purin52002さん
Pimplイディオムは、非常に参考になりました。
回答ありがとうございました。

>>keito94さん
マニアックでしょうかw

>>ISLeさん
確かにprivate変数は、自クラススコープ内ではアクセス権があるので、インテリセンスに表示されるべきでしたね。
納得しました。
早速VisualStudio2017Communityをダウンロードしてみましたが、これインストールめちゃくちゃ大変ですね。
ワークロードを選ばなければならない仕様は、プログラム未経験者を混乱させ、プログラミング入門の敷居を高くしているのではないだろうかと思いました。
ですが、必要となった時に追加でインストール出来るのは、便利ですね。
ちょっとインストール後、触って見ました。
ショートカットキーが変わっていて腹が立ったり、デザインが変わってて困惑したりしました。
ですが、インテリセンスはISLeさんの仰る通り、私が求めていた動作をしてくれました。
VisualStudio2010はもう古そうなので、これを気に2017に乗り換えようと思います。
回答ありがとうございました。