有兩個不相關的結構A和BC++編譯時多態性
template <typename T>
struct A {};
template <typename T>
struct B {};
一個枚舉類型
typedef enum { ma, mb} M;
和含C類函數模板
class C
{
public:
template <typename T>
static void f1 (A <T> &a) {}
template <typename T>
static void f2 (B <T> &b) {}
template <typename U>
static void algo (U &u, M m)
{
/*Long algorithm here
....
*/
if (m == ma) f1(u);
else f2(u);
}
};
靜態方法ALGO包含一些算法,這相當困難......它將一些值和結果修改爲結構A或B.
我想ALGO與取決於M的值對象A或B運行靜態方法。但怎麼說這句話給我的編譯器:-)
int main()
{
A <double> a;
C::algo (a, ma); //Error
}
Error 1 error C2784: 'void C::f1(A<T>)' : could not deduce template argument for 'A<T>' from 'B<T>
A]我在想函數指針,但它們與函數模板使用。
B]也許編譯多態性可能有助於
template <typename U, M m>
static void algo (U &u, M <m>) { ...} //Common for ma
template <typename U, M m>
static void algo (U &u, M <mb>) { ...} //Spec. for mb
但這種解決方案有一個很大的問題:(?爲什麼寫算法兩次)都實現應該不必要囊括了幾乎相同的代碼。
所以我需要函數 algo()處理參數A和B的兩種類型。有沒有更舒適的解決方案?
BTW它是「多態性」。 Polymorfishm有些不同(「Polly,more fish?Hmm?」)。 –
@ Als:我沒有檢查標題:-) – justik
@LightnessRacesinOrbit哦,上帝,我笑了!我的屏幕上現在有牛奶。 –