-4

addStringやのような機能を持つオブジェクトがありますaddInteger。これらの関数は、JSON 文字列にデータを追加します。最後に、JSON 文字列を取得して送信できます。次のことを行うために添え字演算子をオーバーロードすることで、これをどのように簡単にすることができますか?

jsonBuilder builder();

builder[ "string_value" ] = "Hello";
builder[ "int_value" ] = 5;
builder[ "another_string" ] = "Thank you";
4

2 に答える 2

1

関数によって返され、割り当てを処理するプロキシクラスが必要です。operator[]次に、プロキシ クラスは代入演算子をオーバーロードして、文字列と整数を異なる方法で処理します。

このようなもの:

#include <iostream>
#include <string>

struct TheMainClass
{
    struct AssignmentProxy
    {
        std::string name;
        TheMainClass* main;

        AssignmentProxy(std::string const& n, TheMainClass* m)
            : name(n), main(m)
        {}

        TheMainClass& operator=(std::string const& s)
        {
            main->addString(name, s);
            return *main;
        }

        TheMainClass& operator=(int i)
        {
            main->addInteger(name, i);
            return *main;
        }
    };

    AssignmentProxy operator[](std::string const& name)
    {
        return AssignmentProxy(name, this);
    }

    void addString(std::string const& name, std::string const& str)
    {
        std::cout << "Adding string " << name << " with value \"" << str << "\"\n";
    }

    void addInteger(std::string const& name, int i)
    {
        std::cout << "Adding integer " << name << " with value " << i << "\n";
    }
};

int main(int argc __attribute__((unused)), char *argv[] __attribute__((unused)))
{
    TheMainClass builder;
    builder[ "string_value" ] = "Hello";
    builder[ "int_value" ] = 5;
    builder[ "another_string" ] = "Thank you";
}

実際の例については、こちらを参照してください。

于 2016-03-14T14:56:10.427 に答える
0

最後にこれが必要だと思います。文字列入力を取得するために実装しました。整数についても同じことを行います。

#include <iostream>
#include <string>
#include <map>

class jsonBuilder
{
    public:
        std::map<std::string,std::string> json_container;
        std::string&  operator[](char *inp)
        {
            std::string value;
            json_container[std::string(inp)];
            std::map<std::string,std::string>::iterator iter=json_container.find(std::string(inp));

            return iter->second;            
        }   
};

int main()
{
    jsonBuilder jb;
    jb["a"]="b";

    std::map<std::string,std::string>::iterator iter=jb.json_container.find(std::string("a"));
    std::cout<<"output: "<<iter->second;
}
于 2016-03-14T15:14:34.920 に答える