我有了一个模板参数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是一个选项吗? –