强制模板类中的特定类型

时间:2013-03-08 23:58:43

标签: c++

这是我的问题:

我有一个模板化的课程

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


}

1 个答案:

答案 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
    }
}
相关问题