gpt4 book ai didi

c++ - 在同一个类中调用函数指针

转载 作者:行者123 更新时间:2023-11-30 04:52:20 25 4
gpt4 key购买 nike

<分区>

我几乎但没有完全在我的类中实现函数指针以避免大循环的代码重复。

class Scanner
{

void GenerateTextureMap();
void OtherOuterWork();

/*
Extracting the triangle sweep for loop (that is repeated code for each time we need to sweep the triangles)
Of note:
- "How can I avoid syntax errors when creating pointers to members? Use a typedef" https://isocpp.org/wiki/faq/pointers-to-members#typedef-for-ptr-to-memfn
- "How can I avoid syntax errors when calling a member function using a pointer-to-member-function? use std::invoke (C++17)" https://isocpp.org/wiki/faq/pointers-to-members#macro-for-ptr-to-memfn
*/
typedef int (Scanner::*TriangleSweepFunction)(int triangleIndex, Vec2D texv0p, Vec2D texv1p, Vec2D texv2p);
void TriangleSweep(TriangleSweepFunction p);

void MatchCameraToTrianglePaintTextureTriangle(int triangleIndex, Vec2D texv0p, Vec2D texv1p, Vec2D texv2p);
void OtherInnerWork(int triangleIndex, Vec2D texv0p, Vec2D texv1p, Vec2D texv2p);

}

void Scanner::TriangleSweep(TriangleSweepFunction p)
{
for (int triangleIndex = 0; triangleIndex < m_mesh.m_triangles.size(); triangleIndex++)
{
// ...
// loads of code
// ...

std::invoke(p, this, triangleIndex, texv0p, texv1p, texv2p);
}
}

void Scanner::MatchCameraToTrianglePaintTextureTriangle(int triangleIndex, Vec2D texv0p, Vec2D texv1p, Vec2D texv2p)
{
// Inner work on Scanner object variables
// ...
}

void Scanner::GenerateTextureMap()
{
TriangleSweep(&Scanner::MatchCameraToTrianglePaintTextureTriangle);
}

TriangleSweep(&Scanner::MatchCameraToTrianglePaintTextureTriangle);

产量

E0167 类型“void (Scanner::*)(int triangleIndex, Vec2D texv0p, Vec2D texv1p, Vec2D texv2p)”的参数与类型“Scanner::TriangleSweepFunction”的参数不兼容

错误 C2664“void Scanner::TriangleSweep(Scanner::TriangleSweepFunction)”:无法将参数 1 从“void (__cdecl Scanner::* )(int,Vec2D,Vec2D,Vec2D)”转换为“Scanner: :三角扫描函数'

    TriangleSweepFunction p = &Scanner::MatchCameraToTrianglePaintTextureTriangle;
TriangleSweep(p);

产量

E0144 类型“void (Scanner::*)(int triangleIndex, Vec2D texv0p, Vec2D texv1p, Vec2D texv2p)”的值不能用于初始化类型“Scanner::TriangleSweepFunction”的实体

这里的正确语法是什么?(利用已经定义的 typedef)

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