Joh*_*0te 2 c++ operator-overloading
首先,我想指出,我确实阅读了{此处提供的解决方案},其中指出:
请注意,输出流运算符通常不是成员函数。(这是因为二元运算符要成为成员函数,它们必须是其左侧参数类型的成员。但是,这是一个流,而不是您自己的类型。有一些重载的情况除外:operator<<()一些内置函数,它们是输出流类的成员。)
现在,这是我的问题。我正在从大型应用程序中删除库。该库应该将任何有用的功能压缩到一个头文件中。
此头文件中的类之一需要具有流 << 运算符重载。我无法弄清楚如何在没有友元函数的情况下执行此操作,并且如果我使用友元函数,我无法在标头中完成所有操作,因为我会收到多个定义错误。
那么,有没有什么技巧——也许有些技巧可以使用函子、包装器或其他什么东西,这将允许我在我的类中为 << 的运算符重载编写一个定义来避免这个问题?
class SomeClass
{
friend std::ostream& operator <<(std::ostream& os, SomeClass const& sc)
{
// impl
return os;
}
};
Run Code Online (Sandbox Code Playgroud)
类定义内部内联提供的函数定义是隐式标记的inline,因此不会导致多重定义链接器错误。
或者,您可以提供外联定义并显式标记它inline,再次避免多重定义链接器错误:
class SomeClass
{
// unnecessary if operator<< doesn't need access to non-public members
friend std::ostream& operator <<(std::ostream&, SomeClass const&);
};
inline std::ostream& operator <<(std::ostream& os, SomeClass const& sc)
{
// impl
return os;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2173 次 |
| 最近记录: |