繁体   English   中英

如何在模板参数中分离 function 类型返回类型和 arguments

[英]How can I separate function type return type and arguments in template parameter

我想将 function 类型(例如int(float) )传递给 class 模板,该模板将返回类型与变量 arguments 列表分开:

template<typename R, typename... Args>
class CallFunction
{
public:
    R operator()(Args&&... args)
    {
        std::cout << ("" << ... << (args << "\n"));
        return R{100};
    }
};

int main()
{
    CallFunction<int(float)> cf;
    std::cout << "return value: " << cf(200.f) << "\n";
}

我意识到上面的代码不起作用。 在这种情况下, R等于int(float)而不是我期望的int 这是现场样品

我以前见过这样的模板诡计,它实际上以某种方式起作用。 我已经在 SO 上看到了很多关于如何执行此操作的答案,但它需要一个有效的 function 指针。 在这里,我直接指定 function 类型,因此decltype解决方案似乎不适用于这里。

我怎样才能做到这一点? 我的解决方案最多可以使用 C++17。

int(float)是单一类型(具体来说,是 function 类型),因此您的模板只需采用一种类型。 但是您可以使用部分特化来推导返回类型和参数类型。

template <typename>
class CallFunction; // This primary template is not defined.

template <typename R, typename... Args>
class CallFunction<R(Args...)>
{
public:
    R operator()(Args&&... args)
    {
        std::cout << ("" << ... << (args << "\n"));
        return R{100};
    }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM