gpt4 book ai didi

c++ - 如何避免一遍又一遍地编写相同的模板?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:28 25 4
gpt4 key购买 nike

例如,考虑以下示例,其中我们有两个相互依赖的模板类:

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 它。但也许这是错误的;我只是个新手,我见过有人谴责任何#defines。

还有其他解决方案吗?还是这个宏解决方案是最好的解决方案?

最佳答案

我能看到的唯一解决方案是定义一些自定义类型函数别名 来实现两个目标:

  • 使您的代码更简洁且(可能)可读;
  • 使维护更容易(即,正如您在 your comment 中指出的,如果您必须进行更改,则只需在一个地方进行)

例如,你可以改变

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{};

关于c++ - 如何避免一遍又一遍地编写相同的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31743197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com