假設我有一個函數模板是這樣的:強迫模板類與運營商T *
template<class T>
inline
void
doStuff(T* arr)
{
// stuff that needs to use sizeof(T)
}
在另一個
.h
filee我有一個模板類
Foo
有
然後:
public: operator T*() const;
現在,我意識到那些是不同的Ts。但是如果我在堆棧上有一個變量Foo<Bar> f
,只能將它強制爲任何類型的指針調用operator T*()
。然而,如果撥打doStuff(f)
,GCC會抱怨doStuff
不能自動使用Foo<Bar>
而不是自動使用運營商T*()
強制爲Bar*
,然後專用功能模板Bar
作爲T
。
有什麼我可以做的,使這個工作與兩個模板?或者,模板函數的參數必須是實際的指針類型,還是要將帶有強制運算符的模板類傳遞給非模板函數?
解引用參考一般是壞風格。我知道黑客有它們的價值,但只是非常謹慎地使用。 – 2008-10-12 21:25:17
此外,它是不正確的。語法上因爲您沒有在任何地方定義T,語義上是因爲Foo .operator&()不會返回T *,而是返回Foo *。 –
2008-10-12 22:07:39