У меня есть шаблонный базовый класс с оператором шаблонного преобразования. Я хотел бы показать этот шаблонный оператор преобразования в производном классе (из-за поиска по зависимому имени).
template <class T>
class A
{
public:
template <class U>
operator A<U>() const { ... }
};
template <class T>
class B : public A<T>
{
public:
template <class U>
using A<T>::operator A<U>;
};
Есть ли способ сделать это? Приведенный выше код не работает, потому что он говорит мне, что я не может создать шаблон объявления об использовании.
Объявление-использование не может ссылаться на идентификатор шаблона, пространство имен, перечислитель с областью действия, деструктор базового класса. или специализации шаблона элемента для определенной пользователем функции преобразования.
Оператор преобразования по шаблону будет доступен через зависимый от аргумента поиск. По сути, так как вы всегда идете на преобразование с B
пример, A
Оператор приведения не будет скрыт:
#include <iostream>template <class T>
class A
{
public:
template <class U>
operator A<U>() const {
std::cout << "The cast operator becomes availble through ADL\n";
return {};
}
};
template <class T>
class B : public A<T>
{
};
int main()
{
A<double> a1;
A<int> a2;
B<double> b1;
B<int> b2;
a1 = b2;
a2 = b1;
}