如何解决基于非类型参数的存在的类模板重载?
我有一个这样的模板化类:
template <typename T,std::size_t maxSize>
class Foo
{
std::array<T,maxSize> arr;
};
我想重载,您可以选择仅传递T,而是将向量作为基础容器:
template <typename T>
class Foo
{
std::vector<T> arr;
};
执行此操作的正确方法是什么?
解决方法
您可以使用参数包作为大小,并专门处理1个参数或0个参数:
首先,提供无法编译的默认
template <typename T>
struct always_false : std::false_type {};
template <typename T,std::size_t... Is>
class Foo {
static_assert(always_false<T>::value,"too many sizes");
};
然后,部分专用于一个或零个参数:
template <typename T,std::size_t maxSize>
class Foo<T,maxSize> {
public:
std::array<T,maxSize> arr;
};
template <typename T>
class Foo<T>
{
public:
std::vector<T> arr;
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。