gpt4 book ai didi

c++ - 创建指向成员函数的指针的语法

转载 作者:行者123 更新时间:2023-11-30 01:19:30 25 4
gpt4 key购买 nike

我正在尝试编译使用指向(非静态)成员函数指针的旧代码,但它不会编译,因为现在语法不同了。我只能通过键入 &Bar::Foo 创建一个指向函数 Foo 的指针,过去不是这样(只需键入 Foo 将创建一个成员指针)。

这个语法是什么时候添加的,有没有办法让 VisualStudio 中的旧语法避免修改旧代码?

这是一个随机示例,用于编译:

class Foo
{
public:
int Bar(int x)
{
return x + 2;
}

Foo();
};
int (Foo::*f)(int);
Foo::Foo()
{
f = Bar; // error, have to use f = &Foo::Bar now
}

最佳答案

您没有在问题中具体说明,但每当我听到“语法不同”这句话时,我假设您正在从 Visual C++ 6 迁移到更新版本的 Visual Studio。

它的长短是; Visual C++ 6 不使用“符合标准的 C++”。从 Visual C++ 6 迁移到任何其他现代编译器将导致许多语法错误,并且需要一些努力才能迁移到“合规性”。您只需要接受它并更改语法即可。

副手;我没有支持我的资料来源,但我愿意打赌你的函数指针语法属于这一类。

好消息是;一旦完成,世界上几乎所有其他现代编译器都将使用符合标准的代码,因此您应该只需要执行一次。

更新:

我快速搜索并在 least one source 找到了这似乎证实了 MSVC6 的行为:

"Some compilers (most notably MSVC 6 and 7) will let you omit the &, even though it is non-standard and confusing. More standard-compliant compilers (e.g., GNU G++ and MSVC 8 (a.k.a. VS 2005)) require it, so you should definitely put it in."

关于c++ - 创建指向成员函数的指针的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20815545/

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