我有一个带有 init() 方法的模板类,如果存在则必须调用子类方法。基类的方法 init() 永远调用。
template <class T>
class Base
{
template<typename... Args>
void init(Args... args);
T subj;
explicit Base() { subj = new T(); }
}
template<typename... Args>
Base<T>::init(Args... args)
{
invoke_if_exists<&T::init,subj>(args); // <-- that moment
}
需要实现 invoke_if_exists 模板。算法应该是这样的代码
if ( method_exists(T::init) )
{
subj->init(Args...);
}
我需要将它包装到模板中
太感谢了。
[更新]:
让我试着解释一下。
class Foo
{
// ... and there is no init()
};
class Right
{
void init() { ... }
/// ...
}
auto a = new Base<Foo>();
auto b = new Base<Right>();
a->init(); // there is no call for Foo::init();
b->init(); // there is correct call for Right::init();
我invoke_if_exists<>
不仅想与 init() 方法一起使用,它可以是任何方法。