varsa bir üye işlevini çağırın. Şablon parametresi T olan bir A sınıfına sahibim. T sınıfının func1() fonksiyonunu sunduğu durumlarda kullanım durumları vardır ve burada T yokken kullanım durumları vardır. teklif etmeyin. A'daki f() işlevi, varsa func1() işlevini çağırmalıdır. Sanırım bu destek mpl ile mümkün olmalı, ama nasıl bilmiyorum. İşte bazı sözde kodu:Yükseltme MPL: Sadece (0)
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
}
};
Daha da iyisi bir başka durum olacaktır: o TMP için kesinlikle var olduğu
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
else
cout << "func1 doesn't exist" << endl;
}
};
Kodun derlenmeyeceği uygun bir durum bulmayı başarsanız bile. Her iki dalı da derlemek zorundadır ve işlev yoksa, gerçek şube derlenmez. –
Şablon uzmanlığı ile her iki parçanın da derlenmesi gerekmez. Bir şekilde T parametresiyle bir şablon işlevini çağırmak zorunda kalacağım ve T işlevi sunarken veya func1() sunmadığında bu işlevin farklı bir davranışı vardır. Eminim ki mpl bu kullanım davası için bir şey sunuyor. Sadece nasıl kullanacağımı bilmiyorum. – Heinzi
C++ 11 bir seçenek midir? –