Die folgende kompiliert fein:Templated Konstruktor passend besser als Templat-Typ-Konvertierung
#include <iostream>
#include <vector>
class Point : public std::vector<double>
{
public:
Point() = default;
};
class MyClass
{
public:
template <typename T>
operator T() const { return T(); }
};
int main()
{
MyClass myClass;
Point test = myClass;
return 0;
}
Allerdings, wenn ich einen Templat-Konstruktor haben, ist es nicht:
#include <iostream>
#include <vector>
class Point : public std::vector<double>
{
public:
Point() = default;
template <typename TVector>
Point(const TVector& v)
{
(*this)[0] = v[0]; // compiler error on this line (saying no operator[] for MyClass, but the point is that this function is used instead of the type conversion function)
}
};
class MyClass
{
public:
template <typename T>
operator T() const { return T(); }
};
int main()
{
MyClass myClass;
Point test = myClass;
return 0;
}
Ich kann die Point
Klasse ändern (um ein zweites Standardkonstruktorargument oder ähnliches hinzuzufügen), gibt es also eine Möglichkeit, nur MyClass
zu ändern, damit dies funktioniert?
Welchen Compiler benutzen Sie? Mit gcc und clang erhalte ich eine mehrdeutige Suche. –
@RyanHaining g ++ 4.8.4 –
Vorlagen für Templates müssen Typen genau entsprechen und Typkonvertierungen nicht zulassen. Wenn Sie 'Point' nicht ändern können, können Sie unglücklicherweise' MyClass' nicht verwenden. – SergeyA