LxL*_*LxL 8 c++ templates function variadic-templates c++11
说明:
检查模板参数中是否存在特殊运算符很容易(借助此答案).
以下代码检查是否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));
};
Run Code Online (Sandbox Code Playgroud)
问题:
现在我想检查我的所有可变参数模板参数是否都有该运算符.我无法弄清楚如何逐个发送它们HasStringOperator并检查整个结果.
template < class... Word>
class Sentence
{
static_assert(Do all of Words have 'char operator[]'?);
};
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
只需将它应用于每种类型,并将其与trues 数组进行比较.
template <bool... b>
struct BoolArray {};
template <class... TS>
struct DenyType : true_type {};
template <class... World>
class Sentence {
static_assert(is_same<
BoolArray<(HasStringOperator<World>::value)...>,
BoolArray<(DenyType<World>::value)...>
>::value, "WUT");
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |