C++ 防止将对象浇铸为C+以外的任何类型+;
我定义了这个类:C++ 防止将对象浇铸为C+以外的任何类型+;,c++,casting,C++,Casting,我定义了这个类: template <class T> class pure { public: pure(T const& attr) { this->attr = attr; } ~pure() {} T& operator=(T const& attr) { return attr; } operator T() { return this->
template <class T>
class pure
{
public:
pure(T const& attr) {
this->attr = attr;
}
~pure() {}
T& operator=(T const& attr) {
return attr;
}
operator T() {
return this->attr;
}
private:
T attr;
};
模板
纯类
{
公众:
纯(T常量和属性){
这->attr=attr;
}
~pure(){}
T运算符=(T常量和属性){
返回属性;
}
算子T(){
返回此->属性;
}
私人:
T attr;
};
这是一个存储类型为T
的值的类。当我想使用它的一个实例时,我得到的是attr
(通过将pure
转换为T
),而不是pure
)本身的实例
我的目标是创建一个不能强制转换为除
attr
类型以外的任何类型的类,即t
如果您有一个支持C++11的编译器,您可以添加以下成员函数:
template<typename U>
operator U() = delete;
如果您不想将对象从
pure
强制转换为t
,请不要为其提供转换运算符。不,我希望我的pure不能强制转换为two以外的任何类型。这是一个糟糕的问题吗?嘿,这是一个未回答的问题,对堆栈溢出的其他用户非常有用。所以,如果你感到受压迫,就取消你的否决票。七张否决票?他们中有谁能提供一些反馈吗?谢谢!你太棒了!我会试试的。我有C++ 11,你的方法很好,非常感谢!我会把你的帖子标记为答案!很好很简单,我喜欢这个删除关键字。
private:
template<typename U>
operator U();