作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试部分特化一个非常基本的模板化数组类的复制构造函数。
template<typename D, bool destruct = false> class SimpleArray
{
SimpleArray(const SimpleArray& other)
{
//stuff
}
//various other things
}
template<typename D> SimpleArray<D, true>::SimpleArray(const SimpleArray& other)
{
//different stuff
}
但是我得到这个错误:
'SimpleArray<D,destruct>::{ctor}' : unable to match function definition to an existing declaration
但是,我肯定已经声明了函数...我尝试将偏特化中的参数更改为 const SimpleArray<D, true>& other
无济于事。 VC++ 11 没有突出显示部分专用的函数名称本身,所以我猜这个问题不知何故是一个不正确的名称。
最佳答案
您不能对类模板的某个部分特化的单个成员函数进行特化:如果您想采用特化方式,则必须对整个类进行特化。
但是,您可以决定改用重载方式,并区分 destruct
为 true
和 false
的情况通过标签调度。
例如,您可以定义两个名为 copy_construct
的私有(private)成员函数,如下所示:
template<typename D, bool destruct = false>
class SimpleArray
{
// ...
private:
void copy_construct(const SimpleArray& other, std::true_type)
{
// ...
}
void copy_construct(const SimpleArray& other, std::false_type)
{
// ...
}
};
然后您可以让类的复制构造函数根据destruct
参数的值调用适当的重载:
template<typename D, bool destruct = false>
class SimpleArray
{
public:
// ...
SimpleArray(const SimpleArray& other)
{
copy_construct(other, std::integral_constant<bool, destruct>());
}
// ...
};
这将调用适当版本的 copy_construct()
,它将根据 destruct
参数的值执行应该执行的操作。
关于c++ - 模板类复制构造函数的部分特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16575257/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!