.template(点模板)建设使用情况

可能重复:
在哪里,为什么我必须把“模板”和“类型名”关键字?

我遇到的代码段奇特:

#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 < N; ++i) { data[i] = v; } }; template <int I> int GetValue(void) const { return data[I]; }; }; template <int N, int I> void printElement(Collection<N> const & c) { std::cout << c.template GetValue<I>() << std::endl; /// doesn't compile without ".template" } int main() { Collection<10> myc; myc.SetValue(5); printElement<10, 2>(myc); return 0; }

它不是编译无printElement功能.template关键字。 我以前从来没有看到这一点,我不明白什么是需要。 试图将其删除,我得到了很多模板相关的编译错误。 所以我的问题是当使用这种结构? 它是常见的?

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

GetValue是一个从属名称,所以你需要明确地告诉编译器接下来c一个函数模板,而不是一些成员数据。 这就是为什么你需要编写template关键字进行区分这一点。

如果没有template关键词,下面

c.GetValue<I>() //without template keyword

可被解释为:

//GetValue is interpreted as member data, comparing it with I, using < operator
((c.GetValue) < I) > () //attempting to make it a boolean expression

即, <被解释为小于运算符,和>被解释为大于符。 以上解释是当然的不正确的,因为它是没有意义的,因此,会导致编译错误。

欲了解更多详细的解释,在这里阅读接受的答案:

  • 在哪里,为什么我必须把“模板”和“类型名”关键字?
分类:C# 时间:2012-01-01 人气:1
本文关键词: 模板
分享到:

相关文章

  • 是否可以禁用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

  • 工厂模式 - 使用模板 2012-01-01

    我有一个第三方的核心头,我宁愿不要触摸以下几点: 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() { Typ

  • 如何写自己的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.268 (s). 10 q(s)