C ++:创建仅允许继承了特定接口的类的模板函数吗?

克里斯

假设我想写:

class JsonSerializable {
public:
  virtual JsonDocument toJsonDocument();
  virtual void fromJsonDocument();
}

和一个功能:

void readJson(foo &foo, string path){
  // file open and close machinery
  JsonDocument = get_json_doc(file);
  foo.fromJsonDocument(JsonDocument);
}

现在,我要立即写:

template <class T>
void readJson(T &t,...){
   ...
};

现在它是通用的,问题是:我不能将模板函数的使用限制为仅限于类JsonSerializable

如何通过修改以下行来完成此任务:

template<class T> // somehow restrict T to "T such that T is also JsonSerializable"
莫亚

您正在寻找std::is_base_of一个static_assert-

std::is_base_of<B, D> 在编译时检查D是否从B派生。

static_assert执行编译时间检查,如果经过测试会导致编译器错误false

有了这些,您可以检查是否T是一个Serializable对象:

template <class T>
void read(const T& t){
   static_assert(std::is_base_of<Serializable, T>::value, "class need to be Serializable");
};

这是现场样本

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++继承模板类

来自分类Dev

C ++模板类继承

来自分类Dev

C ++继承模板类

来自分类Dev

C ++接口可以从具有完整实现的类继承吗?

来自分类Dev

从C ++中的私有模板类继承构造函数

来自分类Dev

允许继承类使用相同的功能

来自分类Dev

从c ++模板类继承的问题

来自分类Dev

继承和模板函数C ++

来自分类Dev

C#接口可以要求或指定特定的类吗?

来自分类Dev

模板中C ++继承中的模板类

来自分类Dev

c ++模板为特定类型的类调用特定的构造函数

来自分类Dev

C ++模板数组类:错误生成取决于它是否继承接口

来自分类Dev

C#接口和类继承

来自分类Dev

C#可以隐藏继承的接口吗?

来自分类Dev

模板可以扩展C ++函数中的类吗?

来自分类Dev

C++ 如何创建一个不允许模板参数的类模板

来自分类Dev

C ++标准是否允许非模板类使用模板构造函数?

来自分类Dev

c#应该如何更改生成文件以允许为继承的类创建DLL?

来自分类Dev

C ++结合类继承和模板

来自分类Dev

如何在C ++中继承模板类?

来自分类Dev

C ++继承:调用模板的子类函数

来自分类Dev

模板类的好友函数:C ++

来自分类Dev

C ++:从模板类继承并带有可能变化的构造函数参数

来自分类Dev

如何仅继承C ++中的成员函数?

来自分类Dev

C ++派生类仅使用继承的基本构造函数的一部分

来自分类Dev

非模板类中的C ++模板函数

来自分类Dev

模板类的模板函数指针-C ++

来自分类Dev

c ++模板类与其他模板方法的继承

来自分类Dev

C ++继承:调用重载的基类函数