C++ 识别C++;模板代码模式

C++ 识别C++;模板代码模式,c++,templates,design-patterns,c++17,template-specialization,C++,Templates,Design Patterns,C++17,Template Specialization,下面描述的图案类型是否有首选的通用名称? 我正在阅读一组库源文件,在阅读代码后,我可以清楚地看到它的功能。这不是问题所在。事实上,这并没有什么问题,但我越是开始使用模板并通读这些文档;一些图案在视觉上变得可识别 代码有这种模式 template<typename T, typename U, bool is_T_signed = integer_traits<T>::is_signed, bool is_U_signed = integer_traits&

    下面描述的图案类型是否有首选的通用名称?


我正在阅读一组库源文件,在阅读代码后,我可以清楚地看到它的功能。这不是问题所在。事实上,这并没有什么问题,但我越是开始使用模板并通读这些文档;一些图案在视觉上变得可识别


代码有这种模式

template<typename T, typename U, 
    bool is_T_signed = integer_traits<T>::is_signed,
    bool is_U_signed = integer_traits<U>::is_signed>
struct foo_impl {};

template<typename T, typename U>
struct foo_impl<T, U, true, true> {
    static T run( U x ) {
        return ( (x <= /*some max value */ ) && 
                 (x >= /*some min value */ ) );
    }
};

template<typename T, typename U>
struct foo_impl<T, U, false, false> {
    static T run( U x ) {
        return x <= /*some max value*/;
    }
};

template<typename T, typename U>
struct foo_impl<T, U, true, false> {
    static T run( U x ) {
        if ( sizeof( T ) > sizeof( U ) )
            return 1;
        else
            return x <= U( /*some max value*/ );
    }
};

template<typename T, typename U>
struct foo_impl<T, U, false, true> {
    static T run( U x ) {
        if ( sizeof( T ) >= sizeof( U ) )
            return x >= 0;
        else
            return (x >= 0) && (x <= U( /*some max value*/ ));
    }
};

template<typename T, typename U> inline T foo( U x ) {
    return foo_impl<T, U>::run( x );
}
模板
结构foo_impl{};
模板
结构foo_impl{
静态T运行(ux){
返回((x=/*一些最小值*/);
}
};
模板
结构foo_impl{
静态T运行(ux){
返回x尺寸(U))
返回1;
其他的
返回x=sizeof(U))
返回x>=0;
其他的

return(x>=0)&&(x如果我必须给出名称,我会使用不同的整数类型对和from函数调用来避免显式指示类型(因为C++17可以避免额外的函数,如果需要的话)。我不知道这个或其他功能组合是否有固定的名称。@jdehesa我明白你的意思。这是一种随着时间推移看到类似模式的想法。很多时候,它们通常被组合在一起。我知道一整手的名称、含义和用途,如SFINAE、RAII、Tag Dispatching和其他一些。知道什么不是吗嘿,视觉上的样子是一个不同的故事。几年前,我就无法识别除了基础类和基本模板之外的任何模式。最近我开始认识到代码中的特定模式,当我看到它们时,但通常不知道该怎么称呼它们。这就是我尝试扩大我对C++的知识的地方。就是这样;我可以更有效地检测它们,知道它们是什么,它们是如何工作的,以及它们的一般用途是什么。改进这一技能集将提高成为更高效的开发人员、设计师、程序员等的能力。总的来说,以及能够说:等等……我不需要写这个;它在这里,或者在那里只需将其插入,连接并使用它。哦,它还可以提高调试能力。