我尝试构建一个最小的例子:
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();
}
我的问题:为什么在没有对象的情况下调用纯类型的运算符?如何以与调用other
相同的方式调用函数operator()
?
答案 0 :(得分:8)
你不是在纯粹的类型上调用它。 foo()
调用构造函数,并求值为临时foo
对象,然后在其上调用operator()
。
要使用“普通”成员函数执行等效操作,只需执行以下操作:
foo().other(a);
答案 1 :(得分:3)
你没有“在没有对象的情况下调用纯类型的运算符”。语法foo()(a)
正在创建类型foo
的临时(这是foo()
部分),然后使用operator()
作为参数调用该对象上的a
:( (a)
部分。
答案 2 :(得分:2)
纯类型示例:
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();
}