gpt4 book ai didi

c++ - 具有特定模板化类的模板特化

转载 作者:行者123 更新时间:2023-11-30 04:10:12 26 4
gpt4 key购买 nike

给定以下简单的 C++ 类:

using namespace std;

template<class T1>
class ValueWrapper {
private:
T1 value_;

public:
ValueWrapper() {}
ValueWrapper(const T1& value) {
value_ = value;
}

ValueWrapper(const ValueWrapper<T1> &wrapper) {
value_ = wrapper.value_;
}

ValueWrapper& Set(const T1& value) {
value_ = value;
return *this;
}

T1 Get() const {
return value_;
}
};

我试图为该类创建一个简单的 shared_ptr 包装器(如果需要,最终允许开发人员在没有取消引用运算符的情况下使用该类)。虽然我看过几个包装 shared_ptr 的示例,但我找不到任何也使用模板化类特化的示例。

使用上面的类,我创建了一个派生自 shared_ptrValueShared 类:

template<class T1>
class ValueShared : public shared_ptr<T1> {
public:
ValueShared& operator =(const T1& rhs) {
// nothing to do in base
return *this;
}
};

然后,我创建了一个自定义的 make_shared_value 函数:

//
// TEMPLATE FUNCTION make_shared
template<class T1, class... Types> inline
ValueShared<T1> make_shared_value(Types&&... Arguments)
{ // make a shared_ptr
_Ref_count_obj<T1> *_Rx = new _Ref_count_obj<T1>(_STD forward<Types>(Arguments)...);

ValueShared<T1> _Ret;
_Ret._Resetp0(_Rx->_Getptr(), _Rx);
return (_Ret);
}

但是,这是问题代码:

template<class T1, class ValueWrapper<T1>> 
class ValueShared<ValueWrapper<T1>> : public shared_ptr<ValueWrapper<T1>>{
public:
ValueShared& operator =(const ValueWrapper<T1>& rhs) {
auto self = this->get();
self.Set(rhs->Get());
return *this;
}
};

我想在这里提供专门用于 ValueWrapper 类的equals operator 的特化(以便它可以从右侧值获取/设置值)。

我已经尝试了一些东西,但当前的错误是:

error C2943: 'ValueWrapper<T1>' : template-class-id redefined
as a type argument of a template

也许这不是正确的方法,或者这不可能?

最佳答案

以下应消除您的错误:

template<class T1>
class ValueShared<ValueWrapper<T1>> : public shared_ptr<ValueWrapper<T1>> {
public:
ValueShared& operator =(const ValueWrapper<T1>& rhs)
{
auto self = this->get();
self->Set(rhs.Get());
return *this;
}
};

关于c++ - 具有特定模板化类的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751232/

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