避免重复的代码:使用具有默认参数的模板类(C 14)
avoid duplicated code : typedef/using a template class that has default parameter (C++14)
如何定义具有默认模板参数的模板类的别名名称,而无需代码重复?
C 14是否在某些方面改进了它?
在实际情况下,它确实会导致可维护性问题。(演示(
class B{};
template<class T1,class T2,class T3=B>class E{}; //<- "class T3=B"
//^ library
//v user
class C{};
template<class T1,class T3=B> using F=E<T1,C,T3>; //<- "class T3=B" is duplicated
int main() {
F<B> f1;
F<B,C> f2;
return 0;
}
orararound
在旧的C 中,没有优雅的解决方案。
这是最佳的解决方法,通过使用Typedefed类型进行模板参数进行修改: -
class B{};
using E_T3_default=B;
template<class T1,class T2,class T3=E_T3_default>class E{}; //<-
//^ library
//v user
class C{};
template<class T1,class T3=E_T3_default> using F=E<T1,C,T3>; //<-
我的梦想
我希望这样的东西: -
template<class T1,class T3> using F=E<T1,C,T3>;
和F<B>
将自动扩展到E<B,C,B(default)>
(不是编译错误(。
您可以使用参数包:
template <class T1, class... T3>
using F = E<T1, C, T3...>;
...直接将零或一个参数转发至 E
。
相关文章:
- 使函数参数默认为周围范围
- 如何将值传递给其参数(默认参数)
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- C ,构造器中允许的参考参数默认值
- 哪些规则控制参数默认赋值?
- 错误:上一个规范后给出的参数默认参数
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- C++模板参数默认函数实现
- QInput对话框参数默认值
- g++4.8.2上列表方法参数默认初始化时出错
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 函数模板:将第一个模板参数默认为第二个
- 模板模板参数默认可以引用其他模板类型的参数
- 参数默认为先例参数的值
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?
- 模板参数默认为更高版本