【发布时间】:2020-11-27 07:48:17
【问题描述】:
如果以及如何从 C++17 中的任何可调用项中推断出签名类型? 片段:
template <typename T>
struct MyFunction;
template <typename R, typename... Args>
struct MyFunction<R(Args...)>
{
};
template <typename Callable>
auto deduceSignature(Callable&& c)
{
// using Signature = ???;
// return MyFunction<Signature>{ ???};}
}
我想在return 语句中使用使用类模板参数推导。
在客户端代码中我想写这个:
std::int8_t freeFunction(std::int8_t x)
{
return x;
}
auto c1 = deduceSignature(&freeFunction);
auto c2 = deduceSignature([](std::int8_t x){
return x;
});
【问题讨论】:
-
std::function会自动执行此操作。最简单的可能是在未推断的上下文中使用它。类似decltype(std::function{std::declval<Callable>()}) -
你能举个例子吗?如果我将此行放入 deduceSignature,那么我会得到“错误:无效使用不完整类型‘struct utils::memoize::MyFunction<:function char> >’”
标签: c++ c++17 signature callable template-argument-deduction