【发布时间】:2019-07-13 11:08:52
【问题描述】:
例如,我想创建一个数组。数组接受要处理的类型作为模板参数。现在,如果类型是原始类型(int、double、short),则可以使用浅拷贝,而如果它是类,则需要使用类的复制构造函数。如果它是简单的方法之一,我可以在返回值上使用带有 std::enable_if 的 SFAINE,但构造函数并非如此。
我尝试了以下方法,但 GCC-9 给出了编译错误:
template< typename Type, typename std::enable_if< std::is_integral< Type >::value() >::type* = nullptr >
class Array
{
...Implementation...
}
template< typename Type, typename std::enable_if< std::is_integral< Type >::value() == false >::type* = nullptr >
class Array
{
...Implementation 2...
}
此外,我尝试了默认构造函数,但 GCC-9 仍然不满意:
template< typename Type >
class Array
{
Array( typename std::enable_if< std::is_integral< Type >::value() >::type* = nullptr )
{}
Array( typename std::enable_if< std::is_integral< Type >::value() == false >::type* = nullptr )
{}
}
有没有办法根据给定的模板参数的类型创建具有不同实现的同名类?
似乎有类似的问题,但我认为不完全是,如果我错了告诉我,我会删除问题
【问题讨论】:
-
如何使用专业化?还是只是简单的重载?
-
我可以专注于原始类型,因为没有太多,你说得对。想也许有人会知道一些一般的方法