kkt*_*uri 13 c++ decltype c++17
所以我在头文件中有一个具有特定签名的函数,我想在类中声明另一个具有完全相同签名的函数,而无需再次输入参数,当然,希望没有宏...成员函数应该显然还有一个额外的隐藏参数,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; }
Run Code Online (Sandbox Code Playgroud)
这有效(与GCC和ICC),但我不知道它是否在标准中是"合法的".我要求确保它是合法的,它不会在将来突然停止工作.
(如果它不合法并且您想将其报告为错误,请将其标记为建议,使其成为合法的编译器扩展而不是将其删除...)
基本上,它与int fn(int x);在结构中声明一样,这就是它当前的工作方式.
如果你问我一个用例:它是为另一个自由函数声明一个包装器成员函数,它在将this指针传递给自由函数之前对指针做了一些事情.显然,它的参数必须完全匹配.同样,我不想再次输入参数.
| 归档时间: |
|
| 查看次数: |
710 次 |
| 最近记录: |