c++ -从其他对象继承std::元组,并为其添加虚函数
C++ - inherting std::tuple from something adding virtual functions to it
首先是否可以从某些东西继承std::元组?
我有
std::tuple<A, B> // (common base event data)
std::tuple<C, D, E> someObj;
所以如果我构造第二个元组,第一个基类(或类似的东西)也应该涉及。
其次,我认为更重要的是,在运行时,我希望根据我的类型选择正确的虚函数。
例如if
std::tuple<A,B> { virtual void Serialize(); }
我想能够特殊的子类的特化方法,但使用模板,所以它可以在编译时展开,但我可以选择在运行时的方法。
我正在考虑在代码中构建不同的问题,以便我可以实现这一点,但如果不是,我将不得不为每个元组诉诸手写的样板代码。
Tuple不会神奇地扩展您想要的其他元组。您可以提供自己的逻辑:
template<typename... Types>
using child_tuple = std::tuple<A, B, Types...>
template<typename... Args>
auto make_child_tuple(A a, B b, Args&&... args) {
return child_tuple<std::decay_t<Args>...>{a, b, std::forward<Args>(args)...};
}
如果你想要元组上的虚函数(哦,不要),你将不得不引入你自己的结构体:
struct Interface {
virtual void serialize() = 0;
};
template<typename... Types>
struct poly_child_tuple: Interface, child_tuple<Types...> {
void serialize () override { /* ... */ }
};
但是,我强烈建议您以模板函数的形式为元组提供一个通用的序列化函数(请这样做):
template<typename... Types, std::size_t... S>
void serialize(std::index_sequence<S...>, const std::tuple<Types...>& tuple) {
int unpack[] = {(static_cast<void>(
[](auto&& value){
// Do things for each `value` in `tuple`
}(std::get<S>(tuple))
), 0)..., 0};
}
template<typename... Types>
void serialize(const std::tuple<Types...>& tuple) {
serialize(std::index_sequence_for<Types...>{}, tuple);
}
然后,通过该实现,您可以直接调用已知类型的元组,也可以从虚方法调用它,这是您在问题中描述的。
下面是一个用法示例:
template<typename... Types>
struct serializable_tuple_impl : Interface {
void serialize() override {
::serialize(tuple);
}
private:
child_tuple<Types...> tuple;
};
相关文章:
- 哈希表添加函数
- 汇编错误C 在标题文件中添加函数时
- 为什么添加函数在C 11线程中无效
- 在类的快捷菜单上找不到添加函数
- 单链表添加函数-读取访问冲突
- 无法向 MFC ActiveX 添加函数
- 在运行时向对象添加函数集合
- C++ - 如何添加函数以处理货币计算器的多种情况
- 添加函数数组并随机选择其中一个
- 我正在尝试为 c++ 中的数组创建一个添加函数
- Qt从其他线程向事件循环添加函数调用
- 添加参数或添加函数
- 向typedef添加函数
- 在双链表中添加函数会导致无限循环
- 添加函数erf()和erfc()到math.h . _ C基础
- 重载<<运算符和添加函数的问题
- c++初学者.添加函数并调用它失败
- 如果在向类中添加函数时取消选中内联框,则在classname.h中只需要函数原型
- 我终于在链表中制作了我的添加函数,但不能在main中使用.:(.
- 在Qt中在c++中添加C函数时的构建问题