【发布时间】:2010-09-16 19:14:17
【问题描述】:
假设我有一个这样的函数模板:
template<class T>
inline
void
doStuff(T* arr)
{
// stuff that needs to use sizeof(T)
}
然后在另一个.h 文件中,我有一个模板类Foo,它有:
public: operator T*() const;
现在,我意识到这些是不同的 T。但是如果我在堆栈上有一个变量Foo<Bar> f,那么将它强制为任何类型的指针的唯一方法是调用operator T*()。然而,如果调用doStuff(f),GCC 会抱怨doStuff 不能使用Foo<Bar>,而不是自动使用运算符T*() 强制转换为Bar*,然后使用Bar 将函数模板特化为T。
我可以做些什么来使用两个模板来完成这项工作?还是模板函数的参数必须是真正的指针类型,或者带有强制运算符的模板类被传递给非模板函数?
【问题讨论】: