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 に答える