模板的多态使用
Polymorphic use of templates
本文关键字:多态 更新时间:2023-10-16
这里,多态的上下文期望'Derived' from 'Base&
给定class P { };
class Q : public P { };
auto operator + (const P& p, int x) -> DYNAMIC_DECLTYPE(P) {
DYNAMIC_DECLTYPE(P) p2(p);
p2.func(x);
return p2;
}
是否有办法让DYNAMIC_DECLTYPE工作?我想用这个表单代替
template <typename T> T operator + (const T& t, int x)
或者有一个可能很长的
列表if (!strcmp(typeid(p).name(), typeid(derived()).name()) { ... }
,因为后者不能用于将T限制为p或其子类(如果可能,请证明我错了)。
你要做的就是一个模板模式:你有一个无限的族返回类型和匹配的函数参数类型。这应该是一个简单的模板。
如果你想限制允许的类型,你应该添加一些类型trait的魔力。也许像这样:
#include <type_traits>
template <typename T>
typename std::enable_if<std::is_base_of<P, T>::value, T>::type
operator+(T const & t, int x)
{
T s(t);
s.func(x);
return s;
}
(如果func
返回一个引用,您可以将其快捷化为return T(t).func(x);
)
相关文章:
- 多态性和功能结合
- 具有默认模板参数的多态类的模板推导失败
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 多态二进制函数
- 访问存储在向量C++中的结构的多态成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 将 std::allocate_shared 与多态资源分配器一起使用
- 通过switch和static_cast访问多态对象的运行时类型
- C++boost序列化多态性问题
- 多态杆件变量 - 类设计
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- Doees the 'this' 指针参与虚函数的多态行为
- C++ 在堆栈中包含多态属性的类对象存储
- 基类和派生类的多态赋值运算符
- 转身多态对象
- 如何在基类指针向量的元素上应用重载的多态函数
- 具有智能指针的多态性
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- C++事件系统 - 多态事件和事件处理程序