gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:02:14 26 4
gpt4 key购买 nike

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

现在,我真的很惊讶以下 hack/trick 在 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 一起使用),但我不知道它在标准中是否“合法”。我只是想确保它是合法的,并且将来不会突然停止工作。

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

基本上和在struct中声明int fn(int x);是一样的,目前也是这样。

如果你问我一个用例:它是为另一个自由函数声明一个包装器成员函数,该函数在将 this 指针传递给自由函数之前对其进行操作。显然,它的参数必须完全匹配。同样,我不想再次键入参数。

最佳答案

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

关于c++ - 使用 decltype 来声明整个函数类型本身(不是指针!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347534/

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