我有了一個模板參數T有使用案例,其中T類提供了一個功能func1的(A類A(成員)函數),而且用例,其中T沒有按不提供它。 A中的函數f()應該調用func1(),如果它存在。我認爲這應該可以用boost mpl,但我不知道如何。 這裏是一些僞代碼:升壓MPL:只呼叫如果存在
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
}
};
更妙的是別的情況:
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;
}
};
即使你設法找到一個合適的條件,即代碼將不會編譯。 if的兩個分支都必須進行編譯,如果函數不存在,則真正的分支將不會編譯。 –
使用模板專業化,兩部分都不需要編譯。不知何故,我將不得不使用參數T調用模板函數,並且當T提供或不提供func1()時,此函數具有不同的行爲。我確信boost mpl爲這個用例提供了一些東西。我只是不知道如何使用它。 – Heinzi
C++ 11是一個選項嗎? –