gpt4 book ai didi

c++ - 为什么带有指向成员函数指针的可变 lambda?

转载 作者:太空狗 更新时间:2023-10-29 19:44:32 25 4
gpt4 key购买 nike

我想在 lambda 函数的 operator() 上弄脏爪子。以下似乎是任务:

template <typename F>
void bar(F func) {
void (F ::*pm)();
pm = &F::operator();
}

但是,在下面,我需要包含 mutable 关键字。这是为什么?是否可以在上面声明一个指向成员函数的指针,它可以针对任意 lambda 表达式?

int main(int argc, char *argv[])
{
bar([]() mutable {});
return 0;
}

最佳答案

根据 N3291 C++0x 规范的 5.1.2,lambda 的 operator() 是 const 除非您显式声明它 mutable:

This function call operator is declared const (9.3.1) if and only if the lambda- expression’s parameter-declaration-clause is not followed by mutable.

您可以使用一些模板元编程魔法来检测哪个是哪个。

但是,需要注意的是,一旦 func 超出范围,您就不能再使用该成员指针。而且它是成员指针,不是函数指针,所以不能在两者之间进行转换。

关于c++ - 为什么带有指向成员函数指针的可变 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880111/

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