C++ C++;具有多个约束的模板
在C#中,我用于在通用方法或类型中指定多个约束,如下所示:C++ C++;具有多个约束的模板,c++,templates,generics,constraints,C++,Templates,Generics,Constraints,在C#中,我用于在通用方法或类型中指定多个约束,如下所示: 今天我第一次用C++开始了,当Google针对模板多重约束时,我找不到任何有用的东西。br> 看起来这几乎是不可能的,每个人都知道这一点,因此没有人提出任何问题。 P>我知道C语言中泛型比C++更强大,这就是为什么我不能把我的类型限制为倍数超级类型的原因。 < p>你通常用 STD::Enable,对 > /> P>进行C++模板的约束 这里是技巧-如果您的模板如下所示: template <class T> <r
<>今天我第一次用C++开始了,当Google针对模板多重约束时,我找不到任何有用的东西。br> 看起来这几乎是不可能的,每个人都知道这一点,因此没有人提出任何问题。
<> P>我知道C语言中泛型比C++更强大,这就是为什么我不能把我的类型限制为倍数超级类型的原因。 < p>你通常用
template <class T>
<return type> <function name> (args...)
template <class TResponse, class TRequest,
std::enable_if_t<std::is_base_of<MyClass, TRequest>::value &&
std::is_base_of<MyOtherClass, TResponse>::value>* = nullptr>
TResponse Call(TRequest request);
这里,XXX
表示编译时条件
例如:让add(T1 T1,t2t2)
仅为继承自Addable
的对象进行编译:
template <class T1, class T2>
typename std::enable_if<
std::is_base_of<Addable,T1>::value && std::is_base_of<Addable,T2>::value
decltype(T1()+T2())>::type
add (T1 t1, T2 t2){
return t1+t2;
}
模板
typename std::启用\u如果<
std::is_base_of::value&&std::is_base_of::value
decltype(T1()+T2())>::type
添加(T1、T2、T2){
返回t1+t2;
}
在C++中,这是可能的,但是语法相当复杂。在下一个主要的C++版本中,我们很可能会得到一个版本,这使得这更容易。
在C++14中,您发布的C#示例可能如下所示:
template <class T>
<return type> <function name> (args...)
template <class TResponse, class TRequest,
std::enable_if_t<std::is_base_of<MyClass, TRequest>::value &&
std::is_base_of<MyOtherClass, TResponse>::value>* = nullptr>
TResponse Call(TRequest request);
模板
treresponse调用(TRequest请求);
googlestatic\u assert
链接肯定是+1。但是,这将需要相当长的时间来阅读。如果我们使用std::enable_if
而不是std::enable_if_t
@ikh,那么在C++11中就可以使用它。两者之间的区别是什么?在我看来,他们穿这些衣服是一样的examples@NoelWidmer没有区别;只是个帮手std::enable_if_t*=nullptr
比typename std::enable_if::type*=nullptr>
短一点。参见:是的,这是使用低级语言grr的缺点。它起作用了,谢谢:)C++就像毒品一样。我们都知道C是比较容易和更快的发展,我们只是太沉溺于相当的C++: