使用参数列表中给出的参数调用函数

use*_*147 1 java

我想在参数中接收一个函数,并使用一个参数调用它: __CODE__并且__CODE__,禁用隐式生成移动构造函数和移动这些类的赋值运算符.并且由于仅移动数据成员__CODE__,隐式复制成员将被删除.

然而,所有这些都是分散注意力的.

您的__CODE__会员注定失败:

public static <T> T foo(Callable<T> func)
{
     return func.call("bar");
}
Run Code Online (Sandbox Code Playgroud)

这会创建一个rvalue __CODE__,然后将指针返回到该临时值.客户端之前的临时析构可以读取指向该临时的指针.

你需要做的是__CODE__向下传递给__CODE__基类.然后您不需要持有__CODE__或任何其他数据成员.唯一棘手的部分是__CODE__用正确的方法初始化基类__CODE__:

public static <T> T foo(Callable<T> func)
{
     return func.call("bar");
}
Run Code Online (Sandbox Code Playgroud)

现在你将得到隐式的复制成员,事情就会起作用.

ass*_*ias 5

一个Callable<T>只有一个方法:T call().

如果您想要不同的东西,则需要使用不同的参数类型,例如:

public interface CallableWithString<T> {
    T call(String arg); //Assuming you want a string argument
}
Run Code Online (Sandbox Code Playgroud)

然后你的功能可以做到:

public static <T> T foo(CallableWithString<T> func) {
    return func.call("bar");
}
Run Code Online (Sandbox Code Playgroud)