gpt4 book ai didi

c++ - 模板类复制构造函数的部分特化

转载 作者:太空狗 更新时间:2023-10-29 21:45:53 25 4
gpt4 key购买 nike

我正在尝试部分特化一个非常基本的模板化数组类的复制构造函数。

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 没有突出显示部分专用的函数名称本身,所以我猜这个问题不知何故是一个不正确的名称。

最佳答案

您不能对类模板的某个部分特化的单个成员函数进行特化:如果您想采用特化方式,则必须对整个类进行特化。

但是,您可以决定改用重载方式,并区分 destructtruefalse 的情况通过标签调度

例如,您可以定义两个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com