在模板类中调用模板函数

时间:2011-09-13 06:56:19

标签: c++ templates

免责声明:以下问题可能非常简单,我可能会对第一个答案感到震惊。此外,我想为任何重复的问题道歉 - 句法问题并不总是容易识别是口头解释,因此搜索它们并不容易......

但足够了。我有两个模板化的类,其中一个有模板化的成员函数,另一个类试图调用该函数。最小的错误生成示例如下所示:

#include <iostream>

template <typename T>
class Foo {
public:
    Foo() {
    }

    template <typename outtype>
    inline outtype bar(int i, int j, int k = 1) {
        return k;
    }

};

template <typename T>
class Wrapper {
public:
    Wrapper() {
    }

    double returnValue() {
        Foo<T> obj;
        return obj.bar<double>(1,2); // This line is faulty.
    }

};

int main() {
    Wrapper<char> wr;
    double test = wr.returnValue();
    std::cout << test << std::endl;
    return 0;
}

在编译时,这会导致

expected primary-expression before 'double'
expected ';' before 'double'
expected unqualified-id before '>' token

其中所有错误消息都指向代码中标记的链接。

我已经感谢你的想法了,不管它们有多么明显。

3 个答案:

答案 0 :(得分:41)

obj.bar<double>(1,2); // This line is faulty.

此处需要template关键字,因为obj依赖于模板参数Foo<T>的{​​{1}}类型的实例,所以上面应该写成:

T

请阅读@ Johannes的答案,详细解释:

答案 1 :(得分:4)

经常这样:一旦问题发布,答案就会自行解决。 将故障线纠正为

return obj.template bar<double>(1,2);

产生预期结果。

感谢阅读...

答案 2 :(得分:3)

这可能是foo.template bar‹ double >的情况吗?