gpt4 book ai didi

c++ - 从派生类初始化 const fusion boost 列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:18 25 4
gpt4 key购买 nike

是否可以在不使基类成为模板类的情况下将成员 fusion vector 初始化为派生类中指定的值?

像这样:

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
}

我知道这行不通 - 但我希望它能让我更容易理解我的目标。

  1. 延迟 vector 将包含的类型的规范,直到从它派生一个类。
  2. 通过使基类成为模板类来指定 vector 应包含的类型

如果不是-最接近它的是什么?

最佳答案

不需要基类是模板的最接近的事情是使用类型删除。您可以自己滚动 ¹ 或使用 Boost Type Erasure 等。选择最适合您的。

实现它的最简单方法是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++ - 从派生类初始化 const fusion boost 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30278068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com