如何在不使用RTTI的情况下(优雅地)实现这一点?

Rao*_*Rao 1 c# c++ polymorphism rtti

我在C#编写了这个代码,并且想到的最快的解决方案是使用"as"或"is"关键字.我开始想知道如何在C++(没有RTTI)中整齐地实现它......甚至在没有上述关键字的C#中也是如此.

这是问题(简化):

有一个类Command包含一个所谓的"令牌"流.

class Command
{
    public List<Token> Toks {get; set;}

    //...
}
Run Code Online (Sandbox Code Playgroud)

令牌可以(当前)是"关键字"或"游戏对象".

class Token
{
    //nothing in here :(
}

class KWToken : Token
{
    public List<string> Synonyms {get; set;}
}

class GOToken : Token
{

}
Run Code Online (Sandbox Code Playgroud)

后来,我想循环遍历一个Command对象的Tokens 列表,并根据Token存储的类型做事.

在这种情况下的棘手是KWToken对象包含List我需要的一个相关字符串.

当然,如前所述,C#中的简单解决方案将使用"is"或"as"关键字.

我想到了一些不那么性感的方法.
有谁有漂亮的想法?

编辑

(删除打印示例,因为它似乎有误导性)
KWToken对象中的同义词列表将通过关联的Command对象在许多地方访问.不只是一次打印它们,因为我可能暗示我的例子.

ble*_*ech 6

您也可以尝试使用访客模式.虽然这对你的简单场景来说可能有些过分.