0

这是我的问题:

我有一个模板化的类

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);


}
4

1 回答 1

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
    }
}
于 2013-03-09T01:54:17.120 回答