我已经读过 C++11 有足够的静态检查(编译时间),以便实现 C++11(已删除)的概念检查的很大一部分。(我在最近关于删除概念的问题的评论中读到了这一点...... - 这个问题很快就被关闭了,因为没有建设性)。
下面的 C++03 代码仅检查类中是否存在成员函数(我的模板类希望在该类上工作)。以下是搜索的 4 个成员函数,我总是使用相同的模式:
- 一个 typedef 来定义函数原型的 typedef
- 如果类型名 TExtension 没有定义这样的成员函数,或者它有不同的原型,则调用 static_cast 会中断编译
这是代码:
template <typename TExtension>
class
{
...
void checkTemplateConcept()
{
typedef unsigned long (TExtension::*memberfunctionRequestedId)();
static_cast<memberfunctionRequestedId>(&TExtension::getRequestId);
typedef eDirection (TExtension::*memberfunctionDirection)();
static_cast<memberfunctionDirection>(&TExtension::getDirection);
typedef eDriveWay (TExtension::*memberfunctionDriveWay)();
static_cast<memberfunctionDriveWay>(&TExtension::getDriveWay);
typedef unsigned long (TExtension::*memberfunctionCycleId)();
static_cast<memberfunctionCycleId>(&TExtension::getCycleId);
}
}
这是我代码的某些部分,但它完全基于C++03。我很乐意用那些新的 C++11 特性重写它……这里应该用什么来代替?