2012-02-15 10 views
1

なぜ私はこのプログラム(GCC 4.6.2を使用)にリンクエラーを取得していますインスタンス化されていません。ただし、Wrapperをテンプレート以外のものにすると(テンプレートには何も追加されません)、Wrapperは機能します。 Printerの印刷メソッドはインスタンス化されていないようです。何故ですか?テンプレート方法は

+2

FWIW、[GCC 4.3.4]で動作します(http://ideone.com/pR7y6 )とMSVC10は、[GCC 4.5.1](http://ideone.com/6VDTp)で失敗します。私に退行のように見えます。 – ildjarn

答えて

0

私はGCC 4.5.1でthat looks similarに問題がありました(そして、それは回帰のように見えます)。

私の場合、GCC 4.5.1がこのコードを呑み込むようにするために、ポインタを明示的にキャストすることが助けになりました。同じことをここでやってみてください。私。

Caller<Printer<int>, static_cast<void (Printer<int>::*)()>(&Printer<int>::print)> caller; 

(未テスト;?ちなみに、そうでない場合はメタ関数が役立つかもしれない、ここで有効であっても文法的にキャストです。)

+0

残念ながら、提案はコンパイルされません(テンプレート引数として渡される 'static_cast'が問題です)。しかし、一般的な考え方(問題の 'Printer :: print'をどうにかして操作すること)は、コンパイラが他の理由でインスタンス化するように強制する可能性があるので便利です。そのアドレスを取ることはトリックです: 'void(Printer :: * x)()=&Printer :: print'; – Rekr

関連する問題