函子调用(其他字符)

| 我试图建立一个最小的例子:
struct Functor
{
    void operator()(int& a)
    {
        a += 1;
    }
    void other(int& a)
    {
        a += 2;
    }
};

template <typename foo>
class Class
{
    public:
        void function()
        {
            int a = 10;
            foo()(a);
            std::cout << a << std::endl;
        }
};

int main()
{
    Class<Functor> c;
    c.function();
}
我的问题是:为什么甚至可以在没有对象的情况下调用纯类型的运算符?如何像调用
operator()
一样调用函数
other
?     
已邀请:
        您不是在纯类型上调用它。 “ 3”将调用构造函数,并求值为临时“ 4”对象,然后在其上调用“ 2”。 要使用\“ normal \”成员函数执行等效操作,请执行以下操作:
foo().other(a);
    
        您不是在没有对象的纯类型上调用运算符。语法
foo()(a)
创建一个类型为
foo
的临时对象(这是
foo()
部分),然后以object11ѭ作为参数在该对象上调用
operator()
((12ѭ部分)。     
        纯类型示例:
struct Functor
{
    void operator()(int& a)
    {
        a += 1;
    }
    void other(int& a)
    {
        a += 2;
    }
    static void one_more(int& a)
    {
        a += 3;
    }
};

template <typename foo>
class Class
{
    public:
        void function()
        {
            int a = 10;
            foo()(a);
            foo().other(a);
            foo::one_more(a);
            std::cout << a << std::endl;
        }
};

int main()
{
    Class<Functor> c;
    c.function();
}
    

要回复问题请先登录注册