如果我有一个期望接收某种类型的简单函数,例如:
如果我尝试对模板类型执行相同操作,那么它将无法正常工作。
class X
{
public:
X( int ){}
};
void fx( X ) {}
fx( 1 ); // implicit converted to X(int); // fine!
如果我尝试对模板类型执行相同操作,那么它将无法正常工作。
template <typename T>
class Y
{
public:
Y( T ){};
};
template <typename T>
void fy( Y<T> );
fy( 2 ); // Y<int> expected, but it fails
有没有什么技巧可以强制转换?
需要隐式地进行操作,直接访问 fy 不是 所需的。我知道可以通过指定模板参数来强制所有模板;)
Y<const int&>
,Y<int>
,Y<int&&>
都是可行的。你认为编译器会如何决定? - Jarod42