Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能从模板函数调用模板类的模板方法_C++_Templates - Fatal编程技术网

C++ 为什么我不能从模板函数调用模板类的模板方法

C++ 为什么我不能从模板函数调用模板类的模板方法,c++,templates,C++,Templates,可能重复: 我有一个模板类和一个模板方法。 现在我有了另一个函数,有两个模板参数,用第一个模板参数创建类,用第二个模板参数调用函数。 考虑这个例子: template<class S> class A { public: template<class T> T f1() { return (T)0.0; } }; template<class T,class CT&

可能重复:

我有一个模板类和一个模板方法。 现在我有了另一个函数,有两个模板参数,用第一个模板参数创建类,用第二个模板参数调用函数。 考虑这个例子:

template<class S>
class A {
public:
    template<class T>
            T f1() {
                    return (T)0.0;
            }

};

template<class T,class CT>
void function() {
    A<T> a;
    a.f1<CT>(); // gcc error in this line
}
在上面标记的行中。为什么这不起作用?我如何修复它? 谢谢 Nathan

A
是一种依赖类型(即,它取决于模板参数
T
),因此您必须指定您引用的是模板成员:

a.template f1<CT>();
a.template f1();

您可以,但需要帮助编译器

由于
a
具有依赖类型,编译器无法假定
a.f1
引用的内容。它可以是一个类型,一个常数,一个函数。。。不管怎样


因为模板语法使用了
@ebo:ah谢谢,而Johannes的例子比我能想到的要邪恶得多:)
a.template f1<CT>();