考慮下面的代碼:定義操作符<<課內
class MyClass
{
template <typename Datatype>
friend MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData);
// ...
};
template <typename Datatype>
MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData)
{
// ...
}
我如何定義operator<<
內類,而不是一個友元函數?類似這樣的:
class MyClass
{
// ...
public:
template <typename Datatype>
MyCLass& operator<<(MyClass& MyClassReference, Datatype SomeData)
{
// ...
}
};
上面的代碼會產生編譯錯誤,因爲它接受兩個參數。刪除MyClassReference
參數可修復錯誤,但我擁有依賴該參數的代碼。是MyClassReference
就等於*this
?
是'MyClass'的模板,需要一個'DataType'類型參數? – 2011-03-03 08:42:29
@David No;爲了演示目的,使用「數據類型」代替實際類型。 – Maxpm 2011-03-03 17:27:25
@Maxpm:那麼爲什麼你在似乎是一個定義中添加了'template'?你正在聲明一個朋友函數,但是定義了一個不同於野獸的模板,因此不是朋友。 – 2011-03-03 19:41:09