【发布时间】:2011-10-07 11:43:34
【问题描述】:
我有一个具有模板参数 T 的类 A。在某些用例中,类 T 提供函数 func1(),而在某些用例中 T 不提供函数。 A 中的函数 f() 应该调用 func1(),如果它存在的话。我认为这应该可以通过 boost mpl 实现,但我不知道如何。 这里有一些伪代码:
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
}
};
如果是 else-case 会更好:
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 的两个分支都必须编译,如果函数不存在,则 true 分支不会编译。
-
使用模板特化,两个部分都不需要编译。不知何故,我必须调用带有参数 T 的模板函数,并且当 T 提供或不提供 func1() 时,此函数具有不同的行为。我确信 boost mpl 为这个用例提供了一些东西。我就是不知道怎么用。
标签: c++ boost sfinae template-meta-programming boost-mpl