嵌套重载运算符可能吗?我想将<

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/

10-09 05:24