繁体   English   中英

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

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

所以我在头文件中有一个具有特定签名的函数,我想在类中声明另一个具有完全相同签名的函数, 而无需再次输入参数,当然,希望没有宏...成员函数应该显然还有一个额外的隐藏参数, this指针(因为它不是静态成员函数)。

现在,我确实惊讶的是,下面的技巧/诀窍在GCC和ICC 的作品 ,但我不知道这是否是“合法”的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; }

有效 (与GCC和ICC),但我不知道它是否在标准中是“合法的”。 我要求确保它是合法的,它不会在将来突然停止工作。

(如果它不合法并且您想将其报告为错误,请将其标记为建议,使其成为合法的编译器扩展而不是将其删除......)

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

如果你问我一个用例:它是为另一个自由函数声明一个包装器成员函数,它在将它传递给free函数之前用this指针做了一些事情。 显然,它的参数必须完全匹配。 同样,我不想再次输入参数。

这看似合法; 但根据定义,你必须重新输入。 考虑使用完美转发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM