Re[4]: ошибка could not deduce template argument ...
От: w40  
Дата: 28.12.11 12:27
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, w40, Вы писали:



w40>>вот код:

U>сделал минимальные изменения, которые доводят ваш код до компилябельного состояния: http://ideone.com/RtxTa
U>подозреваю, что ваша проблема сосредоточена здесь:
U>
U>class F{
U>public:
U>  template<class T> 
U>  int func(T::B& a){return 0;}
U>};

U>int main()
U>{
U>  A<C>::B a;
U>  F f;
U>  int rc = f.func(a);
    
U>  return 0;
U>}
U>


U>компилятор не может вывести тип T, когда в функцию func передают переменную типа T::B

U>такие ограничения на вывод типа при статическом полиморфизме
U>можно почитать виды полиморфизма здесь: http://fprog.ru/2010/issue4/roman-dushkin-existentials/
U>к сожалению, не могу сказать точно, какой вид полиморфизма вы пытаетесь использовать =\
U>можно спросить в разделе "Функциональное программирование"

в следующем виде компиляется под 2005ым:

struct XXX
{
    int a,b,c;
};

class C{
public:
    typedef XXX B;
};

template<class T> 
class A{
public:
    typedef typename T::B B;
};

typedef A<C> AC;

class F{
public:
    template<class T> 
    int func(typename T::B& a){return 0;}
};

int main(int argc, char* argv[])
{
    AC::B a;
    F f;
    int rc = f.func<AC>(a);
    return 0;
}


но вот на 6-ом

int rc = f.func<AC>(a);

даёт:
error C2275: 'AC' : illegal use of this type as an expression
выходит, что в 6-ом (класс-)функции нельзя явно указать аргумент темплэйта
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.