Template, static_cast
-
Hallo!
Ich habe ein Problem mit einer Bibliothek, in der sich folgendes findet:
template<typename OldType, typename NewType>
struct cast_impl
{
static inline NewType run(const OldType& x)
{
return static_cast<NewType>(x);
}
};Dummerweise existiert für OldType kein Cast nach NewType und ich glaube, ein Cast läßt sich auch nicht hinzufügen, richtig? Daher anders herum, kann man dieses Template spezialisieren? Ich habe direkt darunter eingefügt:
template<>
struct cast_impl<const CORE::Expr,int>
{
static inline int run(const CORE::Expr& x)
{
return static_cast<int>(CGAL::to_double(x));
}
};...aber der Compiler nimmt trotzdem das Template statt der Spezialisierung und schreibt:
invalid static_cast from type ‘const CORE::Expr’ to type ‘int’
-
Wirr.
Die Fehlermeldung ist unvollständig.Und meine Glaskugel sagt, dass wahrscheinlich cast_implCORE::Expr,int benutzt wird. Was nat. auch in der Fehlermeldung steht...
-
ich glaube, ein Cast läßt sich auch nicht hinzufügen, richtig?
Es kommt darauf an, wo. Du kannst bspw. einen expliziten* Konvertierungsoperator in
CORE::Exprhinzufügen, der es in einen Skalar Konvertiert:template<typename Arithmetic> explicit operator Arithmetic() const { return CGAL::to_double(*this); }(Ungetestet)
camper schrieb:
Was nat. auch in der Fehlermeldung steht...
Wieso? Das wird nicht impliziert.
Qualifiziert man einen bereitsconst-qualifizierten Typ noch einmal mitconst, wirkt einfach [dcl.type.cv]/1.~* Das ist erst seit C++11 möglich.~