具有默认模板参数的转换运算符
Conversion operator with default template argument
我想知道 following code 有什么问题:
template<typename T, typename U = T>
operator U()
{
return U();
}
失败 error: no matching function for call to 'Test1::Test1(Test&)'
,而 following code 上的转换成功:
template<typename T>
operator T()
{
return T();
}
完整代码:
class Test
{
public:
template<typename T, typename U = T>
operator U()
{
return U();
}
};
class Test1{};
int main() {
Test t;
Test1 t1 = (Test1)t;
return 0;
}
class Test
{
public:
template<typename T>
operator T()
{
return T();
}
};
class Test1{};
int main() {
Test t;
Test1 t1 = (Test1)t;
return 0;
}
你这样做对编译器来说太难了
template<typename T, typename U = T>
operator U()
{
return U();
}
代码显示 "U is the same type as T"。编译器询问 "And what is T?"。 T
未在您的代码中的任何地方使用,因此编译器无法推断它。
typename U = T
只有一种方法,当 T
已知时定义 U
。
我想知道 following code 有什么问题:
template<typename T, typename U = T>
operator U()
{
return U();
}
失败 error: no matching function for call to 'Test1::Test1(Test&)'
,而 following code 上的转换成功:
template<typename T>
operator T()
{
return T();
}
完整代码:
class Test
{
public:
template<typename T, typename U = T>
operator U()
{
return U();
}
};
class Test1{};
int main() {
Test t;
Test1 t1 = (Test1)t;
return 0;
}
class Test
{
public:
template<typename T>
operator T()
{
return T();
}
};
class Test1{};
int main() {
Test t;
Test1 t1 = (Test1)t;
return 0;
}
你这样做对编译器来说太难了
template<typename T, typename U = T>
operator U()
{
return U();
}
代码显示 "U is the same type as T"。编译器询问 "And what is T?"。 T
未在您的代码中的任何地方使用,因此编译器无法推断它。
typename U = T
只有一种方法,当 T
已知时定义 U
。