我定义了这个类:
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
(通过将pure
转换为T
)而不是实例(pure
)本身。
我的目标是创建一个无法投放到attr
类型以外的任何类型的类,即T
。
答案 0 :(得分:7)
如果你有一个支持C ++ 11的编译器,你可以添加例如以下成员函数:
template<typename U>
operator U() = delete;
该函数是一个通用的转换操作符,并标记为已删除(这是C ++ 11中的新功能)。因为它被标记为已删除,所以转换为除T
之外的任何其他类型都将导致编译器错误。
如果不具有支持C ++ 11的编译器,那么您可以添加与private
函数基本相同的函数声明,并且您将收到另一个错误:< / p>
private:
template<typename U>
operator U();