這裏是我的問題:迫使特定類型的模板類
我有一個模版類
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);
}
專用模板。 – chris 2013-03-08 23:59:26
要調用'SomeClass :: func2',除非'func2'是一個靜態成員,否則需要一個類型爲SomeClass 的對象。要麼找到一種方法來創建這樣的對象,或者讓'func2'成爲一個靜態成員。 –
2013-03-09 00:19:29
我不能使這個函數成爲靜態的,因爲它使用了一些類的數據結構。另外,我不能重載(specialize),因爲有很長的函數調用鏈,所以我將不得不專門化所有的東西,看起來好像沒有簡單的方法,所以我將不得不尋找商業邏輯中的方法。感謝回覆傢伙! – ddahuja 2013-03-09 00:37:28