gpt4 book ai didi

c++ - 调用这个函数对象是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 02:11:45 25 4
gpt4 key购买 nike

我有课

class fobj{
public:
fobj(int i):id(i) {}

void operator()()
{
std::cout<<"Prints"<<std::endl;
}

private:
int id;
};

template<typename T>
void func(T type)
{
type();
}

如果我像这样调用func

方法一:

func(fobj(1)); 

我想打印的消息被打印出来了。

我一直在想我需要做一些类似的事情

方法二:

fobj Iobj(1); // create an instance of the fobj class
func(Iobj); // call func by passing Iobj(which is a function object)

方法 1 如何工作?我的意思是到底发生了什么?

如何调用 fobj 类中的 operator() ?

最佳答案

需要注意的是,这是可行的,因为您的模板类按值获取对象:

template<typename T>
void func(T type) // this takes a T by value
...

因此,它可以采用左值(例如实际变量)或右值(例如临时变量)。

如果出于某种原因你确实想限制 func 只接受左值,你可以修改函数以使用引用传递:

template <typename T>
void func(T &type) // this takes a T by reference
...

使用引用传递确实允许函数能够修改对象的副作用。

关于c++ - 调用这个函数对象是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com