c++ - 如何在类模板中强制执行静态函数并引用它们
问题描述
这是一个由两部分组成的问题,但我相信它们非常密切相关。
问题一:
我读过其他问题,有一些方法可以强制类具有某些静态函数,例如:
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
不是模板时,这可以正常工作,但是当它是模板时,它永远不会推回其函数的实例,更不用说它甚至不强制执行它的实现。
我怎样才能从最派生的类中推回这个函数?
解决方案
推荐阅读
- ember.js - 从 JSON API 响应中删除 `links.related` 是否安全?(Ember.js)
- php - 为什么我不能在 6:00 以内调用时间
- python - 语法错误:无法分配给财务分析工具上的函数调用编码
- javascript - 重构 onload 以添加第二个功能?奖励:一般来说,向变量添加第二个函数怎么样?
- android - 如何在 kotlin 中使代码简单?
- javascript - 是否有获得等效属性百分比值的 SASS 函数?
- amazon-web-services - 如何使用 swagger 和 RestApi 为 Lambda 添加触发器?
- javascript - 附加到具有特定类的每个元素
- java - 模块已被弃用并标记为删除
- ios - iOS 通用链接无法通过 TestFlight 工作