gpt4 book ai didi

c++ - 在 C++ 中如何传递函数指针并在函数中进行比较?

转载 作者:行者123 更新时间:2023-11-30 03:24:41 25 4
gpt4 key购买 nike

出于测试原因,我有一定数量的方法,它们在 C++ 中的签名如下所示:

dvec3 (*)(dvec3, dvec3, double)

我将它们放在一个 vector 中,如下所示:

vector<dvec3 (*)(dvec3, dvec3, double)> methods = {lerp, plerp, splerp, ilerp};

想法是创建一个函数,它接受函数指针并返回一个字符串来标识当前正在使用的函数(即我想打印出上面 4 个函数中正在使用的函数)

为此,我尝试编写如下方法(我故意省略了大部分情况):

string inline erpToString(dvec3 (*f)(dvec3, dvec3, double))
{
if (f==lerp)
{
return "Lerp";
}
}

但是上面的代码没有编译,错误消息指出这是一个转换错误。我做错了什么?

编辑:

编译器信息:

/home/kronos/Desktop/OpenGL-Template/source/Rendering/rendering.cpp: In function ‘std::__cxx11::string erpToString(glm::dvec3* (*)(glm::dvec3, glm::dvec3, double))’:
/home/kronos/Desktop/OpenGL-Template/source/Rendering/rendering.cpp:1362:7: error: invalid operands of types ‘glm::dvec3* (*)(glm::dvec3, glm::dvec3, double) {aka glm::tvec3<double, (glm::precision)0>* (*)(glm::tvec3<double, (glm::precision)0>, glm::tvec3<double, (glm::precision)0>, double)}’ and ‘<unresolved overloaded function type>’ to binary ‘operator==’
if (f==lerp)
~^~~~~~
make[2]: *** [CMakeFiles/voxel-world.dir/build.make:111: CMakeFiles/voxel-world.dir/source/Rendering/rendering.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/voxel-world.dir/all] Error 2

编辑:

我制作了具有相同逻辑的最小可能文件,但它不会重现错误:

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <string>

using namespace std;
using namespace glm;

dvec3 lerp(dvec3 p1, dvec3 p2, double t)
{
return (1-t)*p1+t*p2;
}

string inline erpToString(dvec3 (*f)(dvec3, dvec3, double))
{
if (f==lerp)
{
return "Lerp";
}
}

int main()
{

}

试用代码表明其他方法(ilerp 和公司)确实有效。所以我似乎有一个命名空间冲突(使用命名空间是的)。 SInce GLM 定义了一个 lerp 函数,但我需要使用的是我定义的那个。有人有建议吗?

最佳答案

您可以使用 usingtypedef 来简化所有事情。代码对我有用

int a(float x, float y, double z)
{
return int(x + y + z);
}

int b(float x, float y, double z)
{
return int(x - y - z);
}


using fdef = int(*)(float, float, double); // or typedef int (*fdef)(float, float, double);

std::vector<fdef> v{a, b};

if (v[0] == a)
std::cout << "qqq\n";

关于c++ - 在 C++ 中如何传递函数指针并在函数中进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49565690/

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