我有几个函数像这样
bool RegisterModel (std::shared_ptr<DerivedA> model) { }
bool RegisterModel (std::shared_ptr<DerivedB> model) { }
和我想利用c++ 20的概念,并实现它像这样:
bool RegisterModel (std::derived_from<BaseClass> auto model) { }
这不起作用,因为我正在传递共享指针。有可能需要一个共享指针来保存从BaseClass
派生的对象?
从std::shared_ptr<T>
中推导出T
,并约束:
template<std::derived_from<BaseClass> T>
bool RegisterModel (std::shared_ptr<T> model) { }
// Or as an abbreviated function template
bool RegisterModel (std::shared_ptr<std::derived_from<BaseClass> auto> model) { }