gpt4 book ai didi

C++11:std::mem_fn 的类型名称

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

auto 很好,但我需要在类中声明一个成员,而不是堆栈中的变量。

decltype 有效,但不知何故看起来很奇怪

class Automation {
void _init_state(int);

decltype(std::mem_fn(&Automation::_init_state)) next_state;
};

std::function 似乎也可以,但与纯成员函数有细微差别

class Automation {
void _init_state(int) {}
public:
decltype(std::mem_fn(&Automation::_init_state)) next_state;
std::function<void(Automation&, int)> next_state_fn;

Automation()
: next_state(&Automation::_init_state)
, next_state_fn(&Automation::_init_state)
{}
};

int main()
{
/* on ubuntu, x64 */
std::cout << sizeof Automation::next_state << std::endl; /* 16 */
std::cout << sizeof Automation::next_state_fn << std::endl; /* 32 */
return 0;
}

谁能告诉我正确的方法是什么?

最佳答案

标准未指定 std::mem_fn 的返回类型,因此没有可移植的方式来显式声明该类型的成员变量。

尽管 decltype 构造可能看起来很奇怪,但这是解决此问题的正确方法。 std::function 会产生一些开销,但更灵活,因为您可以比使用 decltype 版本更容易地传递它。

关于C++11:std::mem_fn 的类型名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31604893/

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