【发布时间】:2013-01-18 17:05:31
【问题描述】:
我已经读到 C++11 有足够的静态检查(编译时间),以便实现 C++11(已删除)的概念检查的很大一部分。 (我在最近的一个关于删除概念的问题的 cmets 中读到了这篇文章...... - 这个问题很快就被关闭了,因为没有建设性)。
下面的 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 功能重写它......这里应该使用什么来代替?
【问题讨论】:
标签: c++ c++11 c++-concepts