C ++ рекурсивные зависимости класса - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь сделать что-то похожее на std :: Map. У меня есть два класса, NameValue, который принимает имя и значение. Класс Value может содержать данные типа int и string. Я хочу, чтобы класс Value также принимал NameValue, чтобы иметь возможность создавать вложенные объекты. В настоящее время boost :: variable используется для хранения разрешенных к использованию типов данных.

NameValue.h

  #ifndef INC_NAME_VALUE_H_
    #define INC_NAME_VALUE_H_

    #include <boost/variant.hpp>
    #include <iostream>
    #include <string>
    #include "value.h"

    namespace config {

    using namespace std;
    class Value;  // forward declaration
    class NameValue {
     private:
      string name;
      Value* valuePtr;

     public:
      NameValue(){};
      NameValue(string name, Value& value)
          : name(name)
          , valuePtr(&value){};

      void Print() {
        cout << name << " : ";
        // valuePtr->Print();
      }

      void Set(Value* value) { valuePtr = value; }
    };
    }

    #endif /* INC_NAME_VALUE_H_ */

Value.h

    #ifndef INC_VALUE_H_
#define INC_VALUE_H_

#include <boost/variant.hpp>
#include <iostream>
#include <string>
#include "name_value.h"

namespace config {
using namespace std;

using variantDataType = boost::variant<int, string>;

class Value {
 private:
  variantDataType value;

 public:
  Value(){};
  Value(variantDataType const& value)
      : value(value){};
  void Print() { cout << value << endl; }
};
}
#endif /* INC_VALUE_H_ */

В Value.h я хочу добавить NameValue к варианту, подобному этому:

boost::variant<int,string,NameValue> value;

main.cpp

Value i(42);
NameValue nv("meaning", i);
NameValue nv2("nested, NameValue("deep", "value"));//this is what I want

Может быть, я не на том пути, используя вариант или то, как я использую зависимости. Если есть какой-то другой способ заставить это работать, я был бы признателен за предложения.

...