【发布时间】:2014-07-29 07:39:13
【问题描述】:
说明:
检查模板参数中是否存在特殊运算符很容易(借助answer)。
以下代码检查char operator[] 是否存在于Type 中:
template <class Type>
class HasStringOperator
{
template <typename T, T> struct TypeCheck;
typedef char Yes;
typedef long No;
template <typename T> struct operator_{
typedef char (T::*fptr)(int);
};
template <typename T> static Yes HasOperator(TypeCheck< typename operator_<T>::fptr, &T::operator[] >*);
template <typename T> static No HasOperator(...);
public:
static bool const value = (sizeof(HasOperator<Type>(0)) == sizeof(Yes));
};
问题:
现在我想检查我的所有可变参数模板参数是否都有该运算符。我不知道如何将它们一一发送到HasStringOperator并检查整个结果。
template < class... Word>
class Sentence
{
static_assert(Do all of Words have 'char operator[]'?);
};
我该怎么办?
【问题讨论】:
标签: c++ function templates c++11 variadic-templates