小编Wor*_*tiz的帖子

C++区分Functor和Value模板参数

一般来说,我在理解仿函数方面遇到了一些麻烦,因为我对模板编程很新.

我在这里要完成的是以下内容,我正在尝试使用一个函数来获取一个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.

c++ templates overloading functor

4
推荐指数
1
解决办法
246
查看次数

奇怪的构造,java转换静态方法到类

我最近偶然发现了一段我无法用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接口的类.相反,它传递了一个方法,它以某种方式隐式转换.

我的问题是这是如何工作的,以及这里适用的规则.

java oop static-methods interface

1
推荐指数
1
解决办法
57
查看次数

标签 统计

c++ ×1

functor ×1

interface ×1

java ×1

oop ×1

overloading ×1

static-methods ×1

templates ×1