数据类型与模板参数不同的模板对象
Template object of different data type than template parameter
我有一个模板化类,我想要一个成员函数使用任何模板参数接收该类的对象。 所以它应该能够运行如下内容:
main(){
A<double> object1;
A<double> object2;
A<int> object3;
object1.f(object2);
object1.f(object3);
}
这就是我到目前为止所拥有的,但它似乎不起作用,因为它假设参数必须与调用对象的类型完全相同:
template<typename T>
class A
{
void f(A<T> &a);
}
有什么想法吗? 提前谢谢。
f
本身需要是一个模板,有自己的模板参数:
template<typename T>
class A
{
template <typename U>
void f(A<U>& a);
}
当你调用object1.f(object2)
时,f
将被实例化为 U
= double
;当你调用 object1.f(object3)
时,f
将被实例化为 U
= int
。
在这两种情况下,T
= double
,因为object1
的类型为 A<double>
,T
是类模板A
的模板参数。
您需要一个成员函数模板:
template <typename T>
class A
{
template <typename U>
void f(A<U>& a)
{
//...
}
};
但它似乎不起作用,因为它假设参数必须与调用对象具有完全相同的类型:
当然可以,因为这是你指示它做的:
template<typename T>
class A
{
void f(A<T> &a);
}
也许您想f
本身制作模板:
template<typename T>
class A
{
template <typename T1> //<--- different type
void f(A<T1> &a);
}
相关文章:
- 将值从指针复制到常量对象参数
- 隐式对象参数和此指针
- 将对象传递给 Java C++与使用 JNI 逐个设置对象参数
- 如何通过对象参数从指针矢量中删除对象和指针
- 是否有一种方法可以根据派生的可能性值范围限制对象参数
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- 为什么我不能通过传入的类对象参数杀死 pthread。
- 无法异步启动带有对象参数的函数
- 为什么在 std::transform 中使用函数对象参数失败并且需要 lambda 表达式
- 实例对象如何查看函数的对象参数的私有成员?
- 在没有对象参数编译器错误的情况下调用非静态成员函数
- 具有常数对象参数的类函数
- 模板功能没有对象参数专业
- 为什么不能在对象参数前面使用常量?
- 具有不同签名的函数对象参数的函数
- 调用非静态成员函数,没有对象参数错误
- 如何从 C# 调用具有 void* 回调和对象参数的 C++ Dll 中的函数
- 对函数使用对象参数或不使用参数
- c++错误:调用没有对象参数的非静态成员函数
- c++对象参数:多态性,值语义,对象生命周期