假设一个算法有一个策略FooPolicy
。实现此策略的策略类具有静态成员函数foo
,但对于其中一些,它foo
接受一个int
参数,而对于其他一些则没有。我正在尝试通过constexpr
静态数据成员启用这些具有不同接口的策略类:
struct SimpleFoo {
static constexpr bool paramFlag = false;
static void foo() {
std::cout << "In SimpleFoo" << std::endl;
}
};
struct ParamFoo {
static constexpr bool paramFlag = true;
static void foo(int param) {
std::cout << "In ParamFoo " << param << std::endl;
}
};
template <typename FooPolicy>
struct Alg {
void foo() {
if (FooPolicy::paramFlag) FooPolicy::foo(5);
else FooPolicy::foo();
}
};
int main() {
Alg<ParamFoo> alg;
alg.foo();
return 0;
}
此代码无法编译。gcc 4.8.2
给出错误:
调用 'ParamFoo::foo()' 没有匹配的函数</p>
否则 FooPolicy::foo();
尽管该else
子句在编译时是已知的,但仍会编译FooPolicy::paramFlag
该子句true
。有没有办法让它工作?