mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-16 22:59:39 +08:00
33 lines
712 B
C++
33 lines
712 B
C++
|
|
// A Scalar that asserts for uninitialized access.
|
|
template <typename T>
|
|
class SafeScalar {
|
|
public:
|
|
SafeScalar() : initialized_(false) {}
|
|
|
|
SafeScalar(const T& val) : val_(val), initialized_(true) {}
|
|
|
|
template <typename Source>
|
|
explicit SafeScalar(const Source& val) : SafeScalar(T(val)) {}
|
|
|
|
operator T() const {
|
|
VERIFY(initialized_ && "Uninitialized access.");
|
|
return val_;
|
|
}
|
|
|
|
template <typename Target>
|
|
explicit operator Target() const {
|
|
return Target(this->operator T());
|
|
}
|
|
|
|
private:
|
|
T val_;
|
|
bool initialized_;
|
|
};
|
|
|
|
namespace Eigen {
|
|
template <typename T>
|
|
struct NumTraits<SafeScalar<T>> : GenericNumTraits<T> {
|
|
enum { RequireInitialization = 1 };
|
|
};
|
|
} // namespace Eigen
|