2011-09-14 9 views
0

私は、インクルードファイルを動的に指定するために必要なC++コードを生成するt4テンプレートを持っています。これはT4エンジンのバグのようですか、何か間違っていますか?

エラーを説明するために、私のコードのロジックをすべて削除しました。

以下はコンパイルされません。 エラー2ブロック内に予期しない開始タグまたは終了タグが見つかりました。

#include行にスペースを追加すると、問題が解決されます。

void foo() 
{ 
    string bob = ""; 
#> 
    #include "..\..\SomeDir\ <#=bob #>" 
<#+ 
} 
#> 

これはバグですか、私はバックスラッシュが<#=ボブ#オープンタグをエスケープされ<

答えて

3

続い\を処理するために欠けているいくつかの構文があります>式ブロック、バックスラッシュ自体を別のバックスラッシュでエスケープする必要があります。

#include "..\..\SomeDir\\<#=bob #>" 

このトリックを行う必要があります。

+0

コンパイルのいずれか私はそれを試したことがありません。 – rerun

+0

使用しているVSのバージョンは? - 投稿する前に2010 SP1で試してみましたが、そのバージョンで作業していました。 – GarethJ

0

GarethJが述べたように、ダブルバックラッシュが機能するはずです。私はVS2010 SP1で次のT4テンプレートを試してみましたが、期待どおりに動作するようです。この特に

<#@ output extension=".hpp" #> 
<# 
    foo(); 
#> 
// Test 
<#+ 
void foo() 
{ 
    var bob = "XYZ"; 
#> 
#include "..\\<#=bob#>.h 
<#+ 
    } 
#> 

この問題を回避するには、前方に使用することができ(すなわち「/」)パスのスラッシュの代わりにバックスラッシュ(すなわち「\」)

関連する問題