gpt4 book ai didi

c++ - 如何使用 std::log 作为功能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:16 58 4
gpt4 key购买 nike

我尝试将 std::log 作为函数参数传递,但似乎存在 std::log 的重载实现并且编译器无法解析它。代码:

#include <cmath>
#include <iostream>
#include <vector>
#include <string>
#include <functional>

template <typename FOper>
double Eval(FOper fOper, double X)
{
return fOper(X);
}

int main(int argc, char* argv[])
{
std::function<double(double)> fPlus1 = std::bind(std::plus<double>(), 1.0, std::placeholders::_1);
std::cout<<Eval(fPlus1, 10.0)<<std::endl;
// how to write this fLog ?
//std::function<double(double)> fLog = std::log;
//std::function<double(double)> fLog = std::log<double>;
std::cout<<Eval(fLog, 10.0)<<std::endl;
return 0;
}

如果我取消注释 fLog 定义的任何一行,编译器会提示一条错误消息:

error: conversion from '<unresolved overloaded function type>' to non-scalar type 'std::function<double(doubl
e)>' requested

最佳答案

最简单的方法是简单地转换它:

typedef double (*log_d)(double);
std::function<double(double)> fLog = static_cast<log_d>(std::log);

通过强制转换,您为编译器提供了一个使用重载函数的上下文,因此将从中获取正确的函数指针。

关于c++ - 如何使用 std::log 作为功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9257850/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com