【问题标题】:C++ function that returns pointer to a function返回指向函数的指针的 C++ 函数
【发布时间】:2020-04-29 11:11:34
【问题描述】:

存在带有 4 个参数的函数 add。前 3 个参数是对 const int 的引用,第四个参数是 bool。该函数返回 int 的指针。

函数 make_add_to 接受 3 个参数。第一个是指向与 Add 函数结构相同的函数的指针,第二个参数是对 const int 的引用,第三个是 bool。此函数返回一个指向函数的指针,该函数接受对 const int 的引用并返回 int 的指针。

add_to是一个函数指针,由函数make_add_to返回

谁能完成这个?我不确定 make_add_to 是否正确

#include <iostream>


using namespace std;


int * add(const int &x1, const int &x2, const int &x3, bool y);
int * (*make_add_to(const int &x5))(int *(*f)(const int &x1, const int &x2, const int &x3, bool y),const int &x4, bool y);

int main()
{
    int x=3,y=2,z=1;
    //cout << *dodaj(x,y,z,true);
    int *(*ptr)(const int &x1, const int &x2, const int &x3, bool y) = &add;
    //cout << *ptr(x,y,z,true);
    // (*dodaj_do)

}

int * add(const int &x1, const int &x2, const int &x3, bool y)
{
    int * re = new int;
    int x = x1+x2+x3;
    re = &x;
    return re;
}

【问题讨论】:

标签: c++ function pointers


【解决方案1】:

这应该可行:

#include <iostream>


using namespace std;


int* add(const int &x1, const int &x2, const int &x3, bool y);
int* (*make_add_to(int*(const int&, const int&, const int&, bool),const int &x4, bool y))(const int&);

int main()
{
    int x=3,y=2,z=1;
    auto res_add = add(x,y,z,true);
    cout << *res_add;
    int* (*ptr)(const int &x1, const int &x2, const int &x3, bool y) = &add;
    auto res_add_ptr = ptr(x,y,z,true);
    cout << *res_add_ptr;
    /* might leak memory before reaching here */
    delete res_add; 
    delete res_add_ptr;

}

int * add(const int &x1, const int &x2, const int &x3, bool y)
{
    int *re = new int{0};
    *re += x1+x2+x3;
    return re;
}

但你应该使用这样的东西

#include <iostream>
#include <memory>


std::unique_ptr<int> add(const int &x1, const int &x2, const int &x3, bool y);

auto make_add_to(std::unique_ptr<int>(const int&, const int&, const int&, bool),const int &x4, bool y);

int main()
{
    int x=3,y=2,z=1;
    std::cout << *add(x,y,z,true);
    auto ptr = &add;
    std::cout << *ptr(x,y,z,true);

}

std::unique_ptr<int> add(const int &x1, const int &x2, const int &x3, bool y)
{
    auto re = std::make_unique<int>(0);
    *re += x1+x2+x3;
    return re;
}

【讨论】:

    【解决方案2】:

    功能

    int * (*make_add_to(const int &x5))(int *(*f)(const int &x1, const int &x2, const int &x3, bool y),const int &x4, bool y);   
    

    没有使用,也没有
    make_add_to 接受 3 个参数第一个是指向与 Add 函数结构相同的函数的指针,第二个参数是对 const int 的引用,第三个是 bool。该函数返回一个指向函数的指针,该函数接受对 const int 的引用并返回指向 int 的指针

    它是一个指向函数的指针,它接受 3 个参数...
    并提出问题而不是命令我们完成某件事

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 2017-10-03
      • 2011-01-12
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多