2010-12-27 5 views
1

Попытка получить tensor_ref<A>::result видна в tensor_view.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

Вырезать и вставлять snipits - пустая трата времени, так как большая часть кода, в котором мы нуждаемся, отсутствует. Если вы хотите, чтобы более чем образованные догадки приводили компилируемый фрагмент кода с полным сообщением об ошибке. Английский текст может быть приятным, но это действительно только для вас, мы все довольно свободно владеем компилятором. –

+0

Пробовал объявление объекта типа detail :: tensor_ref :: результат, а не использование, используя? – DumbCoder

+0

@Martin Нелегко сделать это. Шаблоны охватывают 4 файла и очень тихие. – Anycorn

ответ

1

Это не работает, и он isn't intended, чтобы он работал для дальнейшей доработки версии C++.

Таким образом, вы не можете использовать это объявление, используя обычный способ tensor_view::template result при его использовании.

+0

Это ответ на мой ответ? –

+0

@nice это как ответ на вопрос. Тем не менее, также случается, что ваш прием при ответе на это неправильно (изменение: * было неправильным в вашей первой версии, теперь, когда у вас есть ссылка в вашем ответе, тоже это не так). –

+0

ОК, я удалил свой ответ –

0

Вам необходимо прикрепить его к typename, так как это зависимый тип.

+0

нет, его что-то еще – Anycorn

1

Не знаете, как идти о нем так, как вы пытаетесь, или, если это вообще возможно, но вы должны быть в состоянии получить что-то equivelent, делая это:

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

Это работает. Все еще любопытно, почему использование объявления doesnt – Anycorn

0

Моя догадка не вы никогда не указать что I при попытке создать экземпляр result<I>.

Например:

detail::tensor_ref<A>::result; 

Должно быть:

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

Тем не менее, похоже, что вы можете избавиться от линии:

template<class I> 

Поскольку во фрагменте вы Предоставлено, I полностью не используется.

+0

это должен быть шаблон для некоторой метапрограммирующей магии :-) – Anycorn

Смежные вопросы