嵌套重载运算符可能吗?我想将<
template<class T>
struct UnknownName
{
T g;
T&operator<<(std::ostream&os, const T&v){return os<<v;}
bool operator()(const T&v)
{
if(v==g)
//do the streaming << then return true
else return false;
}
};
你能帮我吗?恐怕我的榜样对您来说是不真实的,请问您是否还有任何疑问。真诚的
最佳答案
我能想到的最好的方法是让operator<<
返回特定类型,然后重载operator()
接受该类型:
#include <cstdio>
namespace {
struct Foo {
struct Bar {
int i;
};
Foo& operator()(const Bar& b)
{
std::printf("bar, %d\n", b.i);
return *this;
}
// obviously you don't *have* to overload operator()
// to accept multiple types; I only did so to show that it's possible
Foo& operator()(const Foo& f)
{
std::printf("foo\n");
return *this;
}
};
Foo::Bar operator<<(const Foo& f, const Foo& g)
{
Foo::Bar b = { 5 };
return b;
}
}
int main()
{
Foo f, g, h;
f(g << h);
f(g);
}
至少可以说,这不是一个常见的习惯用法。
关于c++ - 嵌套重载运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7211193/