Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;有没有一种方法可以让模板重载基于类型特性?_C++_Templates - Fatal编程技术网

C++ C++;有没有一种方法可以让模板重载基于类型特性?

C++ C++;有没有一种方法可以让模板重载基于类型特性?,c++,templates,C++,Templates,是否可以基于类型信息重载函数/类模板 例如: #include <type_traits> template<typename Object> class object_worker { public: object_worker(Object&& o) // o - is not POD { // do something } }; template<typename Object> class o

是否可以基于类型信息重载函数/类模板

例如:

#include <type_traits>

template<typename Object>
class object_worker
{
public:
    object_worker(Object&& o) // o - is not POD
    {
        // do something
    }
};

template<typename Object>
class object_worker<std::is_pod<Object>::value == true> // how to make this thing work?
{
public:
    object_worker(Object &&o) // o - is POD
    {
        // do something different
    }
};
#包括
模板
类对象\u工作者
{
公众:
object\u worker(object&&o)//o-不是POD
{
//做点什么
}
};
模板
class object\u worker//如何使它工作?
{
公众:
object\u worker(object&&o)//o-是POD
{
//做些不同的事情
}
};
  • 它必须用某种技术来做什么吗?类似部分模板专门化
  • 如果可以做到这一点,它的名称是什么?(例如,部分模板专门化、概念)

    • 是的,你可以这样做。它的应用非常广泛

      template<typename T, bool = is_pod<T>::value>>
      class foo
      {
      };
      
      // This is a partial template specialization.
      // Triggered only when is_pod<T>::value is true
      template<typename T>
      class foo<T, true> // T can be only a POD type
      {
      };
      
      模板>
      福班
      {
      };
      //这是部分模板专门化。
      //仅当is_pod::value为true时触发
      模板
      类foo//T只能是POD类型
      {
      };
      
      拯救了我的一天!对于第二个模板参数,它不应该被称为完全专门化吗?我想,partial是这样的:
      template类cls{}只希望没有人实例化
      foox
      :-)@KerrekSB是的,通常最好在它周围有一个包装器,或者把它作为一个详细的基类。@KerrekSB足够公平:)@andrgolubev不,一个完整的专门化看起来像“template class”,其中指定了所有的template参数。在上述情况下,
      T
      仍然需要推导。