• C++


      我琢磨着如何才能实现传入函数类型参数的可变参。

      比如,我最开始这样子想的:

    #include <iostream>
    #include <cmath>
    #include <functional>
    #include <algorithm>
    
    
    template<class FT, class ...Args>
    double PenaltyFunction(double x0, double y0, double r0, FT _FuncType, Args ... r)
    {
        return r0 * _FuncType(x0, y0) + PenaltyFunction(r...);
    }
    
    int main()
    {
        double x1 = 1., x2 = 0.;
        std::cout << PenaltyFunction(
            x1, x2, 1., [](double x1, double x2) { return x1 * x1 + x2 * x2; },
            x1, x2, -1., [](double x1, double x2) { return std::log(x1 - 1); } // 多个类似的函数传递
        );
    
        return 0;
    }
    

      但得到 MSVC 编译错误:

    错误	C2672	“PenaltyFunction”: 未找到匹配的重载函数	aaaa	D:source
    eposaaaaaaaaaaaa.cpp	10	
    错误	C2780	“double PenaltyFunction(double,double,double,FT,Args...)”: 应输入 5 个参数,却提供了 0 个	aaaa	D:source
    eposaaaaaaaaaaaa.cpp	8	
    

      之后就是改来改去都不对,然后发现似乎是因为函数类型参数不能可变参,百度、谷歌了一会儿都没找到类似的问题。当然我不想用函数指针,也没测试过,主要想用的是 C++ 的可变参模板。

      

  • 相关阅读:
    <cf>Square
    运算符重载
    HDU 1231 最大连续子序列
    Biorhythms(poj1006)
    友元和友元函数
    <poj 1046>Color Me Less
    <cf> Funky Numbers
    VC++中窗口的最大化问题
    励志文章,没事看一下(网上摘录)
    VC多线程编程(转)
  • 原文地址:https://www.cnblogs.com/darkchii/p/12662126.html
Copyright © 2020-2023  润新知