如何避免一遍又一遍地编写相同的模板
How to avoid writing same templates over and over?
考虑以下示例,其中我们有两个相互依赖的模板化类:
template <class T1, class T2, typename = typename std::enable_if<std::is_blah<T1>::value>::type, typename = typename std::enable_if<std::is_blah<T2>::value>::type>
class someClass
{
// ...
template <class U1, class U2, typename = typename std::enable_if<is_blah<U1>::value>::type, typename = typename std::enable_if<std::is_blah<U2>::value>::type>
void fun1(U1 arg1, U2 arg2)
{
// ...
}
template <class U1, class U2, typename = typename std::enable_if<std::is_blah<U1>::value>::type, typename = typename std::enable_if<std::is_blah<U2>::value>::type>
void fun2(U1 arg1, U2 arg2)
{
// ...
}
template <class U1, class U2, typename = typename std::enable_if<std::is_blah<U1>::value>::type, typename = typename std::enable_if<std::is_blah<U2>::value>::type>
void fun3(U1 arg1, U2 arg2)
{
// ...
}
// ...
};
。在上面描述的情况下,我必须一遍又一遍地编写相同的模板。不用说,这是丑陋的,使代码不可读,是乏味和麻烦的,涉及大量的复制粘贴,等等,等等…
一定有一个合理的解决办法。
一个当然是#define这个模板。我不认为这是一个大问题,因为当然,我可以#undef一旦我完成了所有的声明和定义。但也许这是错误的;我只是一个新手,我见过有人谴责任何#定义。
还有其他解决方案吗?或者这个宏观解决方案是最好的解决方案?
我能想到的唯一解决方案是定义一些自定义的类型函数和别名来实现两个目标:
- 使你的代码更简洁和(也许)可读;
- 使维护更容易(即,正如你在评论中指出的,如果你必须做一个改变,你只需要在一个地方做)
例如,您可以更改
template<typename T1, typename T2, typename = typename std::enable_if<std::is_pod<T1>::value>::type, typename = typename std::enable_if<std::is_pod<T2>::value>::type>
struct C1{};
template<typename T>
using Eif_pod = typename std::enable_if<std::is_pod<T>::value>::type;
template<class T1, class T2, class = Eif_pod<T1>, class = Eif_pod<T2>>
struct C2{};
相关文章:
- 使用一组结构,避免在一组结构中出现重复的结构
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 避免在遍历 IShellItemArray 时出现代码重复
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 为什么当我输入一个大数字时,输出会一遍又一遍地重复?
- 如何遍历几个每小时一次的根(.root)文件,并将它们组合成更大的每日数据.root文件?
- Math.log是以一种避免log(1 x)的精度的方式实现的
- 有没有一种优雅的方式来遍历 Clang AST 语句
- 我如何一遍又一遍地向用户提问,直到他们输入正确的值字段?
- c++ 一遍又一遍地对函数返回相同的检查
- 是否有一种方法可以避免标头文件中使用的constexpr函数输入全局范围,而无需额外的名称空间
- 使用标准库根据一个数组对两个数组进行排序(避免复制步骤)
- 一遍又一遍地构造相同的对象
- 有没有办法不在 c++ 中的参数中一遍又一遍地输入相同的数据类型
- 一遍又一遍地创建同一个文本文件
- 是否允许 vector::insert 只保留一次,避免进一步的容量检查
- 变量不计数,即使一遍又一遍地调用函数
- 如何避免一遍又一遍地编写相同的模板
- 一遍又一遍地传递对象的替代方法
- 一遍又一遍地验证文件时遇到问题