Шаблонная операция над стертым шрифтом
У меня есть класс шаблона val -
template <typename T>
class val;
Здесь оператор перегружен для любой пары типов
T, T2
. В основном член -
template <typename T2>
void operator * (const val<T2>&);
Теперь у меня есть еще один класс, который использует стирание типа для хранения
val
-
class val_holder;
template <typename T>
class val_holder_impl: public val_holder {
val<T> m_val;
};
Наконец, в отдельном классе у меня есть функция шаблона, которая
foo<T>
который определяет
val<T> x
и получает в качестве аргумента
val_holder* y
.
Мне нужно иметь возможность вызывать оператор и
m_val
внутри
y
.
я не могу использовать
dynamic_cast
потому что аргумент шаблона для точного типа y неизвестен.
Другое решение, которое я пробовал, - это иметь виртуальную функцию в
val_holder
осуществляется
val_holder_impl<T>
который вызывает
*
оператор. Но проходя
x
потребует, чтобы аргумент виртуальной функции был шаблонным.
Любые предложения о том, как обойти этот шаблон?