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
仍然需要推导。