- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我制作了这个模板来定义内联仿函数:
template <typename F, F* f>
struct AsFunctor
{
template <typename... Args>
std::invoke_result_t<F, Args...> operator()(Args&&... args) { return f(std::forward<Args>(args)...); }
};
可以这样使用:
std::unique_ptr<char, AsFunctor<void(char*), +[](char* c) {/*STUFF*/}>> p;
除了我必须不必要地声明我的函数类型两次外,效果很好。有什么办法可以让编译器推断出来吗?我已经以各种方式尝试过 decltype,例如
#define AS_FUNCTOR(lambda) AsFunctor<decltype(+lambda), +lambda>
但它们都是编译错误,因为 lambda 不能出现在未计算的上下文中。
最佳答案
您可以对仿函数使用auto
,然后使用decltype
推导类型。
template <auto F>
struct AsFunctor {
template <typename... Args>
std::invoke_result_t<decltype(F), Args...> operator()(Args&&... args) {
return F(std::forward<Args>(args)...);
}
};
int main() {
int i;
std::unique_ptr<char, AsFunctor<+[](char* c) { /*STUFF*/ }>> p;
}
我不知道上下文,但通常你不需要任何自定义仿函数类型(最好立即使用模板,查看来自 STL 的任何示例)或 std::function
.
关于c++ - 推断 lambda 的类型衰减为函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54104716/
liwen01 2024.08.18 前言 无论是在产品开发还是在日常生活中,在使用无线网络的时候,都会经常遇到一些信号不好的问题,也会产生不少疑问: 为什么我们在高速移动的高铁上网络会变
我正在使用 Kinect 获取每个关节的位置和方向,然后将它们发送到 Unity。我注意到值有很多“跳跃”或波动,例如,有时我不移动我的手,而在 Unity 中它会旋转 180 度。 我想要的是一个平
在下面的示例中, #include #include //okay: // template decltype(auto) runner(T&& t, F f) { return f(st
出于某种原因,即使我设置了衰减因子,我的学习率似乎也没有改变。我添加了一个回调来查看学习率,它似乎在每个纪元之后都是一样的。为什么没有变化 class LearningRatePrinter(Call
考虑下面的代码: #include #include using namespace std; template void Test2(future f, Work w) { async([
我是一名优秀的程序员,十分优秀!