ページ 11

VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。

Posted: 2015年5月21日(木) 10:22
by 長峰
現状Visual Studio 2013でC++のテンプレートを書くと、<>の間にスペースが自動挿入されます。挿入されないよう設定を変えたいのですが、
Options→Text Editer→C/C++→Formating→Spacingに該当する項目がなく困っています。

スペースの自動挿入を止める方法を教えてください。

コード:

//このままがいい
template<typename T>
using JaggedArray = std::vector<std::vector<T>>;

//スペース自動挿入後
template<typename T>
using JaggedArray = std::vector < std::vector<T> > ;

Re: VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。

Posted: 2015年5月22日(金) 22:59
by lriki
C++03 ではテンプレートの括弧がシフト演算子に誤認されるという仕様上の問題があります。
おそらくこれを防止するための整形でしょう。
http://dev.activebasic.com/egtra/2011/08/12/389/

VisualStudio2013 は C++11 に (完全ではありませんが) 対応しているため、
std::vector<std::vector<T>>;
と書いてもコンパイルエラーになりません。
しかしこのコードは、例えば VisualStudio2008 でコンパイルすることはできません。

すこし気持ち悪い整形ですが、移植性を高めるという意味で従っておくのが無難ではないでしょうか。

Re: VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。

Posted: 2015年5月23日(土) 17:41
by ISLe()
書式設定の全般の項目のチェックを外せば、『自動で』整形することは止めることができます。

ただし止められるのは『自動で』の部分だけなので、手動で該当箇所を整形すると変更されてしまいます。

Re: VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。

Posted: 2015年5月25日(月) 05:51
by 長峰
lriki さんが書きました:VisualStudio2013 は C++11 に (完全ではありませんが) 対応しているため、
std::vector<std::vector<T>>;
と書いてもコンパイルエラーになりません。
しかしこのコードは、例えば VisualStudio2008 でコンパイルすることはできません。

すこし気持ち悪い整形ですが、移植性を高めるという意味で従っておくのが無難ではないでしょうか。
ISLe() さんが書きました: ただし止められるのは『自動で』の部分だけなので、手動で該当箇所を整形すると変更されてしまいます。
Visual Studioの設定では変更できないのですね。
古いコンパイラを使う予定はありませんが、移植性が高まる利点もあるなら気にしないように使っていきます。

お二方とも回答ありがとうございました。

Re: VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。

Posted: 2015年5月25日(月) 18:06
by ISLe()
昨日Community 2015 RCをインストールしたので試してみました。
結果、空白が挿入されるこはありませんでした。
逆に空白を入れて詰められることもありません。

2013はUpdate 5のCTP2およびRCでは修正されているらしいです。