gpt4 book ai didi

c++ - 这个 C++ 模板函数在做什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:44 26 4
gpt4 key购买 nike

我正在尝试围绕 AngelScript 编写一个薄包装器.我无法弄清楚如何环绕特定结构。

这是我要包装的结构的结构定义,asSMethodPtr:

template <int N>
struct asSMethodPtr
{
template<class M>
static asSFuncPtr Convert(M Mthd)
{
// This version of the function should never be executed, nor compiled,
// as it would mean that the size of the method pointer cannot be determined.

int ERROR_UnsupportedMethodPtr[N-100];

asSFuncPtr p;
return p;
}
};

下面是asSFuncPtr的定义:

struct asSFuncPtr
{
union
{
char dummy[25]; // largest known class method pointer
struct {asFUNCTION_t func; char dummy[25-sizeof(asFUNCTION_t)];} f;
} ptr;
asBYTE flag; // 1 = generic, 2 = global func
};

这是我找到的代码(取自 AngelBinder 库),它允许我“包装”它:

template<typename R> ClassExporter& method(std::string name, R (T::*func)())
{
MethodClass mthd(name, Type<R>::toString(), asSMethodPtr< sizeof( void (T::*)() ) >::Convert( AS_METHOD_AMBIGUITY_CAST( R (T::*)()) (func) ));
this->_methods.push(mthd);
return *this;
}

不幸的是,我不知道这段代码在做什么...

T::* 应该做什么?指向类类型的指针?

什么是 R (T::*func)()

感谢任何帮助...

最佳答案

T::* 是指向成员的指针。 R (T::*func)() 是指向成员函数的指针,该成员函数返回 R 并接受 0 个参数。例如:

struct S
{
int f()
{
return 5;
}

int x = 10;
};

int main()
{
S s;

int S::* ptr = &S::x;

std::cout << s.*ptr; // 10

int (S::*f_ptr)() = &S::f;

std::cout << (s.*f_ptr)(); // 5
}

阅读更多 here .

关于c++ - 这个 C++ 模板函数在做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16247356/

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