- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是测试代码
template <class T> void f()
{
T t;
t.f<T>(0); //compiles even without the "template" keyword, what am I missing?
}
class abc
{
public:
template <typename T>
void f (int){}
};
int main()
{
f<abc>();
}
我正在使用 g++ 4.4.6。谢谢
P.S:我已经大大编辑了我的问题。请不要介意。
编辑:我向 EDG 的人问了这个问题,这是 Mike Herrick 不得不说的
We do diagnose this as an error in --strict mode as well as any mode that enables dependent name lookup (e.g., --dep_name, --parse_templates). Dependent name lookup is disabled in GNU emulation modes, so we don't emit this error in that case.
Dependent name processing requires that nonclass prototype instantiations be enabled (see below). As with nonclass prototype instantiations, enabling dependent name lookup is likely to cause compilation errors when compiling code that was not written with the feature in mind.
The dependent name lookup rules require that nondependent names be looked up at the point of use in the template definition, and that overload resolution be performed on nondependent calls at that point. For dependent calls, the set of names considered is the set visible at the point of use in the template definition plus any names made visible by argument-dependent lookup at the point of instantiation. Note that built-in types have no associated namespaces, so calls with only built-in types can only resolve to names visible in the template definition. Furthermore, names from dependent base classes are not visible to unqualified lookups.
下面说明了一些最常见的代码问题使用从属名称查找时:
template <class T> struct B {
void f();
};
template <class T> struct A : public B<T> {
X x; // error: X not visible yet (formerly an error in strict mode)
void g() {
f(); // error: B<T>::f not visible
this->f(); // must be written this way
h(1); // error: h(int) not visible using argument-dependent lookup
}
};
struct X {};
void h(int);
A<int> ai;
最佳答案
template
关键字 是 都是必需的,因为 t
是从属名称,因为 f<T>
是依赖成员函数模板特化。相关规范分散在第 14 条中,但从 §14.2/4 开始(在 C++03 和 C++11 中)。
问题是由于不正确的名称查找:gcc 正在查找 namespace 作用域函数模板 f
在声明点,然后在实例化点解析 f
abc
的成员函数模板.
如果您重命名命名空间作用域函数模板或成员函数模板,您将从编译器获得正确的行为。
这是一个长期存在的 gcc 错误:
另请参阅针对这两个问题解决的许多重复错误。我没有看到为此打开的 Clang 错误。
函数模板中的名称查找在 C++03 中未指定;有许多关于该主题的缺陷报告,规范在 C++11 中进行了重大更改,以澄清细节和极端情况并修复细微问题。
关于c++ - "template"不需要关键字? [gcc/clang/Comeau 错误?],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8986498/
template struct List { }; template class> struct ListHelper; template struct ListHelper> { };
最近,我注意到 html/template.Template 的 Templates() 与 text/template.Template 的工作方式不同。 // go1.12 func main()
我正在尝试使用 polymer 1.0 实现一个网站。我有一个自定义元素 my-greeting,里面有一些模板重复。 我想做的是获取一个名为 TARGET 的字符串,但我不知道该怎么做: /cons
(是的,由于我糟糕的英语,标题很奇怪;我希望有人能改进它。) 接听this question ,我发现这段代码有效: template class A { }; template class U>
这个问题在这里已经有了答案: How to import and use different packages of the same name (2 个答案) 关闭 4 年前。 我正在使用 Go
我的想法是这是不可能的,或者我缺少一个额外的步骤。无论哪种方式,我都被卡住了,无法弄清楚。 使用内联模板的原因是能够使用 Laravel Blade 语法并结合 Vue Js 的强大功能。似乎是两者中
我已经尝试实现一个“模板模板模板”——模板类来满足我的需求(我对使用模板元编程很陌生)。不幸的是,我发现以下主题为时已晚: Template Template Parameters 不过,我需要实现如
Helm _helpers.tpl? Helm 允许使用 Go templating在 Kubernetes 的资源文件中。 一个名为 _helpers.tpl 的文件通常用于定义 Go 模板助手,语
{{template "base"}} 和 {{template "base".}} 有什么区别? 我用的是go-gin,两者都可以正常运行。我在文档中找不到关于此的任何描述。 最佳答案 来自 god
我有一个本质上充当查找表的函数: function lookup(a::Int64, x::Float64, y::Float64) if a == 1 z = 2*x + y else if a =
当 out 成员函数(来自模板和特化)都需要模板时,为什么 c++ 需要模板参数,因为我没有得到它,谷歌也没有帮助。必须是c++11但和c++1z有同样的错误。 我正在使用 g++ 7.3.0 收到此
我正在寻找简单的方法来将带有 ${myvar} 的简单模板转换为带有 {{ myvar }} 的 GO 模板。 是否有任何库可以实现这一点? 最佳答案 使用正则表达式查找 \${([a-z0-9\_\
我有这个模板可以将 slice 的多个项目解析到页面上。它确实做得很好。 但是,我现在想使用完全相同的模板来根据范围索引解析 slice 的单个值。该 slice 在多个文件中使用,所以我不能像 Sl
要清理模板文件夹,我想将常用模板保存在子文件夹中。目前我有以下文件结构: main.go templates/index.tpl # Main template for the
最近我设计了元类型和允许编译时类型连接的可能操作: #include template typename T> struct MetaTypeTag {}; /*variable template
准备模板时发生错误。谁能告诉你怎么修? 如有必要,还可以编辑变量。 vars: AllСountry: - "name1" - "name2"
我在使用新的匿名模板引擎时遇到问题。它不能使用嵌套模板。我收到错误消息:“此模板引擎不支持嵌套在其模板中的匿名模板”。 我的问题:我如何强制 knockout JS 使用jquery 模板引擎,而不是
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 8
我在 C++ 中使用带有模板的集合: template class OMSSVDisk : public OMSSObjProperties{ set memberPDs; }; 如上面代码中
因为我喜欢分离接口(interface)和实现,而不是只在头文件中实现模板类,我将它分成 .h 和 .tpp(.tpp 这样它就不会用 *.cpp 编译)。然后我将 tpp 包含在头文件的末尾,就在
我是一名优秀的程序员,十分优秀!