工厂模式 - 使用模板

我有一个第三方的核心头,我宁愿不要触摸以下几点:

template<typename Iterator_T> struct Tree { template<typename Node_T> struct TypedNode; struct AbstractNode { AbstractNode(Iterator_T t) { ... } template<typename Rule_T> TypedNode<Rule_T>* NewChild() { TypedNode<Rule_T>* ret = new TypedNode<Rule_T>(this); AddChild(ret); return ret; } template<typename T> TypedNode<T>* GetFirstTypedChild(); }; template<typename Node_T> struct TypedNode : AbstractNode { ... }; template<typename Rule_T, typename ParserState_T> void CreateNode(ParserState_T& p) { current = current->template NewChild<Rule_T>(); } }; template<typename Node_T> struct TreeBuilder { Tree<Iterator_T> tree; template<typename Rule_T> void CreateNode() { tree.CreateNode<Rule_T>(*this); } };

并想TypedNode的子类添加到树用另外的方法和部件。 有没有干净的方式做到这一点无需重构原来的代码? 我认为问题的症结在于:TypedNode * RET =新TypedNode(本);

这看起来像它可以使用工厂,也许专业的TypedNode模板实例并包括基本报头前标题。 就像是:

template<> struct Tree<const char*>::TypedNode<SpecificRuleType> { ... };

但它不能抱怨“太少了模板参数列表”。 可能是一些小事,但我的<模板福>是一个有点生疏了:>(任何想法,将不胜感激!

--------------解决方案-------------

这两个TreeTypedNode是模板,您的专业应该是:

template<> // for Tree<...>
template<> // for TypedNode<...>
struct Tree<const char*>::TypedNode<SpecificRuleType>
{
...
};

分类:C# 时间:2012-01-01 人气:0
本文关键词: 模板
分享到:

相关文章

  • .template(点模板)建设使用情况 2012-01-01

    可能重复: 在哪里,为什么我必须把"模板"和"类型名"关键字? 我遇到的代码段奇特: #include <iostream> template <int N> struct Collection { int data[N]; Collection() { for(int i = 0; i < N; ++i) { data[i] = 0; } }; void SetValue(int v) { for(int i = 0; i <

  • 是否可以禁用Office.Com模板? 2012-01-01

    是否有可能从连接到Office.com额外的样式和模板停止Office 2010应用程序? --------------解决方案------------- 如果你不是管理员,你可以编辑与以下关键注册表: [HKEY_CURRENT_USER \软件\微软\办公室\ 14.0 \ COMMON \互联网] "UseOnlineContent"= DWORD:00000000 这将停止办公室(和Word)中的文件新建对话框显示"从Office.com模板",并限制模板安

  • 我可以继承ERB模板? 2012-01-01

    有没有办法有一个模板继承另一个模板? 我没有使用Rails. --------------解决方案------------- 不,你不能继承ERB模板 - 它不是一类. 这仅仅是一个文件. 编辑: 据@丹的评论,我承担了Django的模板继承一看,它看起来非常相似的Rails content_for 不过,我不知道如何使用它的Rails之外. 看看在这里点3.2和3.3,并在这里. 我也很喜欢Django的模板继承,但它不是提供至少与西纳特拉. 该西纳特拉本书解释了如何使用一个layout.er

  • 如何写自己的PHP模板引擎? 2012-01-01

    我想类似智者另一个插件中写我自己的模板引擎. <body> <p><?php echo $paragraph; ?></p> <i><?php echo date("l"); ?></i> </body> 但我想下面写 <body> <p>{paragraph}</p> <i>{day}</i> </body> 我怎么能

  • .select_related后Django的输出模板数据() 2012-01-01

    我有MySQL数据库: 在Django模型: class Record(models.Model): schema_id = models.IntegerField() project_id = models.IntegerField() name = models.CharField(max_length=50) class Value(models.Model): record = models.ForeignKey(Record) key = models.ForeignKey(Key)

  • MSVC 2010模板地图类崩溃编译器 2012-01-01

    为什么下面的代码崩溃的编译器? #include <iostream> #include <string> #include <map> class test{ public: template <typename T> std::map<std::string, T> stuff; }; int main(int argc, char* argv[]) { test peanuts; return 0; } 有没有编译器或有什么错误吗? ---

  • 奇数解决方法不可用模板Word或Excel在OS X 10.7 2012-01-01

    一些奇怪的最近与我的模板发生,因为我已经升级到OS X 10.7. 我的模板将不再提供给我在Word或Excel中,当我选择文件...从模板新建...我的模板. 我知道怎么看模板在Finder中,他们都在那里,但他们不露面,当我尝试从其中选择一个Word中. 他们是新老模板组合,有些是.DOTX文件,有些是微软的Word 97-2004模板. 但这里是解决方法. 我创建我的模板我的模板文件夹中的文件夹,并把所有的模板,在这个更深的文件夹. 现在,他们出现. 在Word中首选项,这些模板的位置设置

  • 2.0的FxPlug模板没有出现在Xcode 4了 2012-01-01

    我已经安装的FxPlug 2.0,但没有模板显示出来在Xcode 4当我选择"新建项目". 我怎样才能让模板出现? --------------解决方案------------- 模板还没有在Xcode 4的工作,你可以使用在/ Developer /例子/的FxPlug一个例子/为起点,虽然. 此外,在Xcode 3模板创建的项目在Xcode 4的工作.

  • 专业模板成员函数? 2012-01-02

    我想有几个不同的函数定义为一个模板类的成员函数. 事情是这样的: template <typename T> class MyClass { void Foo(); T val; //other functionality and data }; //handles all types template <typename T> void MyClass<T>::Foo() { return val; } //handles a special type in a di

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.337 (s). 10 q(s)