C++中指向构造函数的指针语法

Iva*_*kov 3 c++

我正在制作一个跨平台的库,在几个平台上实现几个基本原语.为了验证基元(即类)的每个实现都提供了所有平台上所需的核心成员,我使用以下构造:

template<typename _Ty> int _MethodVerifyHelper(_Ty);
#define ENSURE_MEMBER_DECL(className, methodName, returnType, ...) typedef char __PROTOTYPE_VERIFIER__[sizeof(_MethodVerifyHelper<returnType (className::*)(__VA_ARGS__)>(&className::methodName))]
Run Code Online (Sandbox Code Playgroud)

然后我写这样的东西:

ENSURE_MEMBER_DECL(Event, TryWait, bool, unsigned);
Run Code Online (Sandbox Code Playgroud)

因此,如果Event类没有bool TryWait(unsigned)方法,我们将在这里得到一个编译错误.

问题是:在C++中是否有类似的语法来声明指向构造函数的指针?我希望有一个语句,如果一个类没有提供给定参数类型的构造函数,则会导致编译时错误.

Jam*_*nze 10

您无法获取构造函数的地址,但如果无法使用给定的参数集构造对象,则很容易出现编译时错误:

typedef int dummyToTriggerError[ sizeof( T( arg1, arg2, arg3 ) ) ];
Run Code Online (Sandbox Code Playgroud)

当然,关键部分是sizeof表达式,它包含一个永远不会被评估但必须合法的对象结构.它包含在一个typedef以确保它不会生成任何代码.