防止将对象转换为除一种类型C ++之外的任何对象

时间:2015-04-03 12:11:23

标签: 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->attr;
    }

private:
    T attr;
};

这是一个存储T类型值的类。当我想要使用它的实例时,我得到attr(通过将pure转换为T)而不是实例(pure)本身。

我的目标是创建一个无法投放到attr类型以外的任何类型的类,即T

1 个答案:

答案 0 :(得分:7)

如果你有一个支持C ++ 11的编译器,你可以添加例如以下成员函数:

template<typename U>
operator U() = delete;

该函数是一个通用的转换操作符,并标记为已删除(这是C ++ 11中的新功能)。因为它被标记为已删除,所以转换为除T之外的任何其他类型都将导致编译器错误。


如果具有支持C ++ 11的编译器,那么您可以添加与private函数基本相同的函数声明,并且您将收到另一个错误:< / p>

private:
    template<typename U>
    operator U();
相关问题