一般来说,我在理解仿函数方面遇到了一些麻烦,因为我对模板编程很新.
我在这里要完成的是以下内容,我正在尝试使用一个函数来获取一个Functor和一个带有值的重载函数.
理想情况下:
template<typename ValueType>
int function(ValueType v)
{
v + 1;
...
}
template<typename Functor>
int function(Functor f)
{
f();
...
}
Run Code Online (Sandbox Code Playgroud)
我可以通过将std :: function作为参数来获得性能,但我特别希望能够将lambda作为参数.
编辑
我想要实现的是允许我正构建的构造在必要时进行惰性求值:
construct.option(1)
construct.option([](){ return 5;})
construct.value()
Run Code Online (Sandbox Code Playgroud)
使用构造选择在调用选项时获取哪个参数的值.(可能有一个额外的参数来确定是否选择了该选项)
要明确的是,只要完成此选项调用,它就会知道是否评估表达式.
此外,如果参数重载了()运算符,我想调用它,不管它是否也重载+ 1.
我最近偶然发现了一段我无法用java理解的代码.我已经创建了同一种结构的小版本:
public class StaticMethodClass {
static void IDK(Integer i, String somethingElse) {
System.out.println("It has been done");
}
public static void main(String... whatever) {
Action.ITEM.doStuff();
}
}
interface Func {
void exec(Integer i, String somethingElse);
}
enum Action {
ITEM(StaticMethodClass::IDK);
private Func f;
Action(Func f){
this.f = f;
}
void doStuff() {
this.f.exec(1, "huh");
}
}
Run Code Online (Sandbox Code Playgroud)
我不能像Action.ITEM一样构建它,因为它应该得到一个实现Func接口的类.相反,它传递了一个方法,它以某种方式隐式转换.
我的问题是这是如何工作的,以及这里适用的规则.