C++ 在c+中预先创建对象+;

C++ 在c+中预先创建对象+;,c++,C++,这是我正在尝试做的具体例子。我需要在这个函数结束时创建一个对象类型,这样我就可以将它存储在其他对象(尚未创建)中,即字符串、Id或表达式参数。我面临的问题是,如果我还没有完成逻辑,我不知道要创建什么类型的对象,如果我在执行逻辑时在if语句中创建对象,它将不再存在。我想将这些对象存储到另一个类中的parameter类型的向量中,这里没有列出。在代码末尾 bool parameter(Predicate& pred)//look for the following: STRING | ID

这是我正在尝试做的具体例子。我需要在这个函数结束时创建一个对象类型,这样我就可以将它存储在其他对象(尚未创建)中,即字符串、Id或表达式参数。我面临的问题是,如果我还没有完成逻辑,我不知道要创建什么类型的对象,如果我在执行逻辑时在if语句中创建对象,它将不再存在。我想将这些对象存储到另一个类中的parameter类型的向量中,这里没有列出。在代码末尾

bool parameter(Predicate& pred)//look for the following: STRING | ID | expression
{
    //store a parameter in this predicate
    Parameter // <- I don't know which type of object to create yet!!!!
    //create parameter
    get_grammar_type(token, sfile);
    token_type = token.Get_type();
    if(token_type == STRING)
    {
        //would create object of type string here
        //can't create object here. It won't exist after.
    }
    else if(token_type == ID)
    {
     //would create object of ID string here
           //can't create object here. It won't exist after.
    }
    if(expression(pred))
    {
         //would create object of Expression here.can't create object here. It won't exist after.
    }
//store object in object pred here. Pred has a private member of a vector of type parameters within it.
    return true;
}

#ifndef PARAMETER_H
#define PARAMETER_H
#include <string>
#include <vector>
#include "Predicate.h"

using namespace std;

class Parameter
{

    public:

    private:
}

class String : public Parameter
{
    public:
        insert_string(string in_string);


    private:
        string my_string;

}

class ID : public Parameter
{
    public:
        insert_id(string in_ID);

    private:
        string my_ID;

};


class Expression : public Parameter
{
    private:
        Parameter left_parameter;
        Parameter right_parameter;
        string op;

    public:

};

#endif
bool参数(Predicate&pred)//查找以下内容:STRING | ID |表达式
{
//在此谓词中存储参数

Parameter/在这种情况下,您可以使用指针。进一步创建
Parameter*
变量,并在其中一个if语句中动态分配数据结构并分配给该指针。例如:

Parameter *parameter = NULL;
if(token_type == STRING)
{
    parameter = (Parameter*) new String();
}

如果您不想担心释放问题,请做一些更有趣的事情。

在这种情况下,您可以使用指针。进一步创建
参数*
变量,并在其中一个if语句中动态分配数据结构,并分配给该指针。例如:

Parameter *parameter = NULL;
if(token_type == STRING)
{
    parameter = (Parameter*) new String();
}

如果不想担心分配,做一些比较理想的事情。< / P>我不确定是否<代码> C++ >代码>接口> <代码> s,但我在 C++ >代码>中创建了一个结构,它持有<>代码>接口< /C>对象和<代码> EnUM<代码>,这样你就可以稍后把它转换成正确的类型。ome:)您是否使用多态性?由于OP具有子类型,您应该创建一个指向基类的指针,并动态创建子类,不过最好将变量封装在参数内部,这样您就不必这样做。虽然如果使用new,请确保不会出现内存泄漏。每个指针最终都必须删除在某种程度上,使用.<代码> C++ C++ >代码>接口> <代码> >,但这就是我在“代码> C<<代码> >中所做的操作。创建一个包含<代码>接口<代码>对象的结构和一个<代码> EnUM <代码>,以便稍后可以将其转换为正确的类型。类型您应该创建一个指向基类的指针,并动态创建子类,不过最好将变量封装在参数内,这样您就不必这样做。尽管如果使用new,请确保不会出现内存泄漏。每个指针都必须在某个点被删除。请使用。