首页 > 解决方案 > 如何在类模板中强制执行静态函数并引用它们

问题描述

这是一个由两部分组成的问题,但我相信它们非常密切相关。

问题一:

我读过其他问题,有一些方法可以强制类具有某些静态函数,例如:

class Type{
   virtual void staticVirtual() = 0;
};

template<typename T>
class StaticContract{
   void staticVirtual(){
       T::foo();
   }
};

如果我创建了一个继承自该合同的类:

class Example : public StaticContract<Example>{
   ...
};

然后Example就得实现一个静态函数了foo()

我遇到的问题是,如果我创建了一个从合同继承的模板类:

template <Typename T>
class mTemplateClass : 
   public StaticContract<mTemplateClass<T>>{
   ...
}

我没有因为不实施而得到任何错误foo()

如何强制模板具有我可以调用的某些静态函数,或者这是否可能?


问题2:

考虑到上面的问题,每个都StaticContract包含一个 a 的静态实例,Registration该实例使用传递的类型进行实例化,(StaticContract<typename T>并且将具有 a Registration<T>):

template <typename T>
class Registration :
    public Registrants
{
public:
    Registration() {
        vectorOfFunctions->push_back(&T::foo);
    }
};

当继承自的类StaticContract不是模板时,这可以正常工作,但是当它是模板时,它永远不会推回其函数的实例,更不用说它甚至不强制执行它的实现。

我怎样才能从最派生的类中推回这个函数?

标签: c++templates

解决方案


推荐阅读