2011-12-20 17 views
4

私はインスタンス化しようとしていますが、インスタンス化句ではtypedefを使用したいと思います。しかし私は、C++ externテンプレートのインスタンス化とtypedef(gcc)

template class myTemplate; 

私は私が代わりに(extern) template class myTemplate_base<commonValue>を書くことができます知っている:私は実際にこのようなテンプレートをインスタンス化しようとした場合、私は同じエラーを取得

typedef myTemplate_base<commonValue> myTemplate; //in 99% of the cases I use this so I want a shorthand 
extern template class myTemplate; //wont work/compiler error class infront of typedef 

:私は例以上千個の言葉と言うと思います私は3つの場所で1つの代わりに私の共通の値を調整する必要があるので、これは醜いと思う。

これで、extern宣言/インスタンス化でtypedefを使用するにはどうすればよいですか?

私はUbunutu

+1

あなたは疑問です...あなたはC++構文が醜いと思いますか?私たちに知らなかったことを教えてください... –

+0

トロールを食べないでください... 私はそれがかなりうまく機能していると思いますが、私はtypedefsからインスタンス化できませんでした。 – ted

答えて

7

のtypedef名上のgcc 4.6.1をウッシングいますが、明示的なインスタンス化で使用することはできません。

明示的なインスタンスは、クラスまたはメンバークラスである場合14.7.2/3

、より 詳述型指定子単純なテンプレートを含まなければならない宣言で -id。明示的なインスタンスは、関数または メンバ関数のためである場合は、宣言の中でunqualifiedidは、すべてのテンプレート引数を推測することができる テンプレート-IDまたは、 テンプレート名オペレータのいずれかでなければなりません-function-id。 ...

+1

ありがとうございます。私がstackoverflowに来るたびに、ここではC++ StandardGurusの量に驚いています。 – ted

2

共通価値としてconstexprまたはtypedefを使用してください。次に、共通の値を1回変更するだけで、すべての明示的なインスタンス化が変更されます。

これは、できる限りのことです。 tyepdef名前を使用して明示的なインスタンス化を行うことはできません。

+0

+1の回避策 – ted

関連する問題