Предположим, у меня есть такой шаблон функции:
template<class T>
inline
void
doStuff(T* arr)
{
// stuff that needs to use sizeof(T)
}
Затем в другом .h
файле у меня есть шаблон класса Foo
, который имеет:
public: operator T*() const;
Теперь я понимаю, что это разные Ц. Но если у меня есть переменная Foo<Bar> f
в стеке, единственный способ привести ее к любому указателю - вызвать operator T*()
. Тем не менее, если вызов doStuff(f)
, GCC жалуется, что doStuff
не может принять Foo<Bar>
вместо автоматического использования оператора T*()
для принудительного обращения к Bar*
, а затем специализировать шаблон функции с Bar
как T
.
Могу ли я что-нибудь сделать, чтобы эта работа работала с двумя шаблонами? Или аргумент функции шаблона должен быть реальным типом указателя, или класс шаблона с оператором приведения должен быть передан в не шаблонную функцию?