使用sectType声明整个函数类型本身(不是指针!)

Using decltype to declare the entire function type itself (not pointer!)

本文关键字:指针 声明 sectType 类型 函数 使用      更新时间:2023-10-16

因此,我在标头文件中具有特定签名的函数,我想声明另一个功能,该函数在class >>>>中>>>参数再次,当然,希望没有宏...成员函数也应该具有额外的隐藏参数,即this指针(因为它不是静态成员函数(。

现在,实际上,我很惊讶的是,GCC和ICC中的以下hack/trick ,但我不确定它是否是"法律" C 。我并不特别关心合法性,如果这是一个受支持的扩展,但不幸的是,我不希望它破坏编译器版本更新,因为有些人决定任意封锁 有用的功能,因为标准说"不"(说实话,这种东西真的很烦(。

这是我的意思:

// test.hpp
int func(int x) { return x; }
struct foo
{
  decltype(func) fn;  // <-- legal?
};
int test()
{
  return foo().fn(6);
}

// then in test.cpp
int foo::fn(int x) { return x + 42; }

this works (与GCC和ICC一起使用(,但我不知道标准中是否是"合法"。我只是要放心,这是合法的,并且将来不会突然停止工作。

(如果它不合法,您想将其报告为错误,请标记为将其作为合法编译器扩展而不是杀死它的建议...(

(

基本上,它与结构中的 int fn(int x);相同,这就是当前的工作方式。

如果您要求我使用用例:它是为其他免费功能声明包装器成员函数,该功能在将其传递给免费函数之前,将其与this指针一起使用。显然,它的参数必须完全匹配。同样,我不想再次键入参数。

看起来合法;但是在定义上,您必须重新输入。考虑使用完美的转发。