2010-12-27 16 views
1

テンソルビューでtensor_ref<A>::resultを表示しようとしています。C++、テンプレートネストされたクラスを継承する

template<class A, class Range, class = void> 
struct tensor_view 
    : detail::tensor_ref<A>, 
    const_tensor_view<A, Range, tensor_view<A, Range> > 
{ 
    using detail::tensor_ref<A>::result; 

...

template<class A> 
struct tensor_ref<A, typename same_rank<A,N>::enable> 
    : const_tensor_ref<A> 
{ 
    template<class I> 
    struct result { 
     typedef typename traits<A>::reference type; 
    }; 

error: no class template named "result" in "struct tensor::tensor_view<...

できますか?

+0

私たちが必要とするコードの大部分が欠落しているので、カットアンドペーストのスニペットは時間の無駄です。教育的な推測よりも多くの推測を望むなら、完全なエラーメッセージを含むコンパイル可能なコードを与えます。英語のテキストは素晴らしいかもしれませんが、それは本当にあなたのためだけです。私たちの残りの部分は、コンパイラの使用に堪能です。 –

+0

@Martinそう簡単ではありません。テンプレートは4つのファイルにまたがり、静かに大きくなっています。 – Anycorn

答えて

1

これは動作しません。isn't intendedは、C++のそれ以上のリビジョンで動作するようにしています。

宣言を使用することはできません。代わりに、普通のtensor_view::template resultの方法を使用してください。

+0

これは私の答えの答えですか? –

+0

@niceそれは質問に対する答えとして意図されています。しかし、それはまた、それが間違っていることにあなたのテイクを表示することが起こる(編集:*あなたの答えにもリンクがあるので、*あなたの最初のバージョンで*間違っていたので、それはもはや間違っていない)。 –

+0

OK、私は自分の答えを削除しました –

0

依存型のため、接頭辞にtypenameを付ける必要があります。

// using detail::tensor_ref<A>::result; 
template < typename I > struct result : detail::tensor_ref<I> {}; 
+0

いいえ、その何か – Anycorn

1

わかりませんresult<I>をインスタンス化しようとしたときに何がIであるかを示します。例えば

detail::tensor_ref<A>::result; 

は次のようになります。あなたはそのためのスニペットに

template<class I> 

:あなたが行を取り除くことができますように見える、と述べ

detail::tensor_ref<A>::result< /* Some type */ >; 

提供された、Iは完全に使用されていません。

+0

これは動作します。まだ好奇心が強いのはなぜ宣言を使用して – Anycorn

0

私の推測では、指定されることはありません:それについてあなたがしようとしている道を行くために、あるいはそれも可能ですが、場合は、これを行うことにより、equivelent何かを得ることができる必要がありますか

+0

それはいくつかのメタプログラミングの魔法のためのテンプレートでなければなりません:-) – Anycorn

関連する問題