Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;20具有非类型模板参数的lambda_C++_Templates_Lambda_C++20 - Fatal编程技术网

C++ C++;20具有非类型模板参数的lambda

C++ C++;20具有非类型模板参数的lambda,c++,templates,lambda,c++20,C++,Templates,Lambda,C++20,我正在摆弄新的C++20 lambda,似乎我可以声明一个lambda接受一个非类型模板参数,但是我不能调用它 #包括 int main(){ //编撰精良 自动f=[](){返回ok;}; //它甚至有一个地址?? 标准::cout 是否禁止在lambda调用站点显式传递模板参数 不,但问题是您没有为正确的实体指定模板参数。请注意,f本身不是模板。它是一个非模板类型的对象,包含模板化的成员操作符() 所以当你这样做的时候: f<true>(); // error 很好,因为您正在

我正在摆弄新的C++20 lambda,似乎我可以声明一个lambda接受一个非类型模板参数,但是我不能调用它

#包括
int main(){
//编撰精良
自动f=[](){返回ok;};
//它甚至有一个地址??
标准::cout
是否禁止在lambda调用站点显式传递模板参数

不,但问题是您没有为正确的实体指定模板参数。请注意,
f
本身不是模板。它是一个非模板类型的对象,包含模板化的成员
操作符()

所以当你这样做的时候:

f<true>(); // error
很好,因为您正在为确实是模板的
f
操作符()
指定模板参数


此外,此问题与lambda的非类型模板参数无关,如果它也是类型模板参数,也会发生同样的情况。

一种可能是直接在lambda内部调用函数模板:
f.operator()();
。不确定是否还有其他方法。@tkausl,很好,我没有想到它是这样工作的:)如果lambda本身,即函数对象,无法参数化,我想知道标准是否可以将
f()
定义为
f.operator()的一种语法糖()
@plexando我看不出任何不起作用的理由。但是,这将是一条附加规则,我认为没有多大好处。@plexando:
f(1)
已经是
(f1
的意思,当
f
是一个值(不是一个模板)时。@DavisHerring好吧,就是这样:)我甚至没想到:)@Davis Herring:)是的,先生(瑞德)海岭。我一直想知道谁是幕后黑手:。
f.operator()<true>();  // ok