задачка по C++ [уже решена]
> а если T = A<T1> — использовала некоторую специальную реализацию
я че-то не пойму, тебе нужна полная или частичная специализация функции?
Мне нужно специализировать функцию для тех случаев, когда аргументом шаблона является экземпляр другого шаблона.
template <> void B<A<T1> >::f
{
}
Откуда взять T1? Такой код не компилируется.
#include <iostream>
using std::cout;
using std::endl;
template <class T> class A
{
public:
T t;
};
template <class T> class B;
//здесь код для любых T кроме A< >
template <class T> struct f_func
{
int operatorB<T> &b)
{
cout << "T" << endl;
return 0;
};
};
//здесь код для A<T>
template <class T> struct f_func<A<T> >
{
int operatorB<A<T> > &b)
{
cout << "A<T>" << endl;
return 0;
}
};
template <class T> class B
{
public:
int f
{
return f_func<T>*this); //все довольны :-)
}
};
int main
{
B<int> bi;
B<A<float> > baf;
bi.f;
baf.f;
}
Спасибо! Именно то, что надо.
Оставить комментарий
Landstreicher
Приведенный выше код не компилируется, но в целом идею показывает. Нужно сделать так, чтобы в шаблоне B некоторая функция f имела дефолтную реализацию, а если T = A<T1> — использовала некоторую специальную реализацию.
Можно менять не только B, но и A, например вводить в какие-то новые поля, typedef, enum и т.п.
Знаю одно очень извращенное решение, использующее sizeof. Хотелось бы обойтись без sizeof и как можно проще.