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

C++ 从派生类初始化const fusion boost列表,c++,boost,c++14,fusion,C++,Boost,C++14,Fusion,是否可以将成员融合向量初始化为派生类中指定的值,而不使基类成为模板类 像这样: class container { const auto children; container (auto children):children (children){} } class derived : public container { derived():container(make_vector(string("test1"),string("test"))){} // http://www.boos

是否可以将成员融合向量初始化为派生类中指定的值,而不使基类成为模板类

像这样:

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
}
我知道这是行不通的,但我希望这能让我更容易理解我的目标

  • 延迟向量将包含的类型的指定,直到类从中派生
  • 通过将基类设置为模板类,不指定向量应包含的类型

  • 如果不是,那么最接近它的是什么?

    不要求基类成为模板的最接近的事情是使用类型擦除。您可以使用自己的ª或使用Boost类型擦除等。选择最适合您的

    实现它的最简单方法是
    boost::any

    样品

    #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;
    }
    

    例如


    不,这意味着什么?基类中的子类应该变成=make_vector(string(“test1”)、string(“test”);类容器{const auto children;容器(auto children):children(children){}friend ostream&Operator谢谢你-这并不能真正解决我的问题,因为这需要将子类的类型存储在派生类中。这使得不可能在基类中迭代子类。因此我认为做我想做的事情确实是不可能的。但我学到了很多,回答得很好。如果有人发现了,谢谢你我想让他们知道我最终做了什么。我没有让孩子们在基容器中,而是在派生类中声明他们,并使用它们从基容器访问。
    (test1 test)