为什么在函数指针中使用显式对象参数会出现语法错误?

问题描述 投票:0回答:1

因此,对于我正在从事的项目,当我尝试对函数指针使用显式对象参数时,我遇到了问题。 乍一看,代码在语法上似乎很好,但由于这是一个新功能,我在网上找不到太多信息,所以我不知道为什么会出现随机语法错误。 具体来说,错误是“语法错误:')'”

我唯一真正的猜测是,这是某种 MSVC 不完整性/错误,在这种情况下我可能不得不切换到不同的编译器。

///base.h
///...
#include <map>

template <class s>
using FunctionMap = std::map<std::string,void(*)(this s& self)>;
                                            ///^ Syntax Error Here

class base{
//...
public:
   ///Get Map of fPtr
   template <class Self>
   FunctionMap<Self>* get_scripts(this const Self& self);
}

我期望它能够编译,但它不断出现语法错误。我知道显式对象参数仅在 MSVC 中部分实现。

c++ visual-c++ c++23 explicit-object-parameter
1个回答
0
投票

函数指针中的显式对象参数没有任何意义。 这不是 MSVC 问题,它只是无效代码。 自由函数指针不能有任何对象参数,无论是隐式的还是显式的。

但是,请注意以下事项:

  • void(*)(s& self)
    就可以了,没有
    this
  • 获取一个显式对象成员函数的地址会产生一个常规函数指针
    • 例如
      &base::get_scripts<T>
      属于类型
      std::map<...>(*)(s&)

简而言之,您可以使用常规函数指针。 只需去掉函数指针类型中的

this
即可。

© www.soinside.com 2019 - 2024. All rights reserved.