这是我的问题:
我有一个模板化的课程
Template <class T>
SomeClass
{
void func1(T* arg1)
//many methods using T
void func2(T* arg1);
}
对于大多数情况,相同的类类型T被传递给类方法,它们基于T工作(因此代码可以是通用的)。对于某些特定情况,我想强制func2忽略T并使用我想要的东西,所以我可以这样做:
void func1(T* arg1)
{
T* ptr2;
int* ptr1;
if (a specific case)
{
SomeClass<int>::func2(ptr1);
}
else
{
func2(ptr2)//so it will assume ptr2 is of type T*
}
}
似乎并不直接工作..
最终工作代码(面向类似问题的其他人)
#include<stdio.h>
template <class T>
class SomeClass
{
public:
void func1(T arg1);
template< typename U >
void func2(U arg1);
};
template< typename T >
void SomeClass<T>::func1(T arg1)
{
if (1)
{
func2<int>(5); // U will deduce to int
}
}
template<class T> template<class U> void SomeClass<T>::func2(U arg1)
{
printf("%d",arg1);
}
int main()
{
SomeClass<float> c;
c.func1(5.0);
}
答案 0 :(得分:0)
这样的事可能适合你:
template <class T>
class SomeClass
{
void func1(T* arg1)
template< typename U >
void func2(U* arg1);
};
和
template< typename T >
void SomeClass<T>::func1(T* arg1)
{
T* ptr2;
int* ptr1;
if (a specific case)
{
func2(ptr1); // U will deduce to int
}
else
{
func2(ptr2); // U will deduce to T
}
}