0
我想要一個帶有模板轉換運算符和默認構造函數的模板化類,但是我的初始嘗試不起作用。具有默認構造函數的模板類中的模板轉換運算符?
template<typename T>
class C
{
public:
C() {}
template<typename U>
operator U()
{
C<U> c; // (*)
c._a = dynamic_cast<U*>(_a);
return c;
}
private:
T* _a;
};
但是現在,當我嘗試創建一個C的實例,
template<typename T>
void F()
{
...
C<T> obj;
}
運營商U()保持一遍又一遍自稱在(*),最終段錯誤。同樣的事情發生在我定義外部轉換並從操作符U()調用它的函數時 - 在這種情況下,類定義中沒有對C :: C()的調用。
在我看來,當我想調用默認構造函數時,轉換運算符會被調用 - 它本質上是試圖自我轉換。但是,有辦法做我想做的事情嗎?
哈,太棒了!聽起來像你釘牢它。實際上,我想要將C轉換爲C 。所以我想我應該嘗試'操作員C '?我不在電腦上,所以我明天會檢查一下。我認爲這是一個如此低級別的錯誤,但仍然編譯的代碼是扔給我的,但無論如何,謝謝,這聽起來很有希望。 –
@MattPhillips嘗試'模板運營商C (){...}'(其實是的,正是你所說的) –
哦,不,你用了一個goto! ;) –