从派生类初始化const融合增强列表
Initialise const fusion boost list from derived class
是否有可能将成员融合向量初始化为派生类中指定的值,而不使基类成为模板类?
:
class container
{
const auto children;
container (auto children):children (children){}
}
class derived : public container
{
derived():container(make_vector(string("test1"),string("test"))){} // http://www.boost.org/doc/libs/1_57_0/libs/fusion/doc/html/fusion/container/generation/functions/make_vector.html
}
我知道这行不通——但我希望它能让你更容易理解我的目标。
- 延迟指定vector将包含的类型,直到从它派生出一个类。 通过使基类成为模板类而不指定vector应该包含的类型
如果不是-最接近它的是什么?
不要求基类必须是模板的最接近的方法是使用类型擦除。您可以滚动自己的¹或使用Boost类型擦除等。选择最适合你的。
实现它的最简单方法是boost::any
:
Live On Coliru
#include <boost/any.hpp>
#include <boost/fusion/include/io.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/include/make_vector.hpp>
#include <string>
namespace fus = boost::fusion;
class container
{
protected:
boost::any children;
template <typename T>
container (T const& children) : children(children) {}
};
class derived : public container
{
using V = boost::fusion::vector2<std::string, std::string>;
public:
derived() :
container(fus::make_vector(std::string("test1"),std::string("test"))){}
friend std::ostream& operator<<(std::ostream& os, derived const& d) {
return os << boost::any_cast<V const&>(d.children);
}
};
#include <iostream>
int main() {
derived d;
std::cout << d;
}
打印
(test1 test)
¹例
- c++中面向对象与泛型编程的矛盾
- 生成没有虚函数的接口?
- boost::multi_array的容器类型
相关文章:
- 无法将结构注册为增强几何体3D点
- 增强基于 XML class_id的反序列化
- 增强精神解析器规则以检测语句中的特殊结尾
- C++ 使用增强正则表达式库时断言崩溃
- 增强精神 X3:错误:在"..."中没有名为"大小"的类型
- 如何包装(撰写)增强 hana 地图并访问括号运算符(运算符 [])?
- 有没有办法在C ++中检测汉字?(使用增强)
- 如何将增强MSM与增强信号结合使用?
- 如何使用增强::几何计算多边形的旋转固体体积?
- 使用融合乘法累加实现双精度有多大优势?
- 复制部分文件的C++/增强方式
- 增强 ASIO 和串行端口异步读取
- 用枚举场和STL容器解析结构,并使用增强精神/融合轻松
- 增强融合和运行时收集
- 如何在增强融合向量中识别类型
- 增强融合:嵌套flatten_view和zip_view
- 调整定义/包含生成的结构以增强::融合
- 使用增强融合显示一个扁平的凤凰表情
- 增强融合变换类型操作和as_vector
- 从派生类初始化const融合增强列表