我正在制作一个跨平台的库,在几个平台上实现几个基本原语.为了验证基元(即类)的每个实现都提供了所有平台上所需的核心成员,我使用以下构造:
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以确保它不会生成任何代码.
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |