可变类中的模板函数

时间:2014-12-19 00:38:39

标签: c++ templates c++11 variadic

为什么goo中的注释行不会编译?相反,我不得不求助于定义全局函数hoo而不是使用Thing成员函数foo

#include <iostream>

template <typename... T>
struct Thing {
    template <typename U> void foo() {std::cout << this << '\n';}
};

template <typename U, typename... T>
void hoo (const Thing<T...>& thing) {std::cout << &thing << '\n';}

template <typename U, typename... T>
void goo (const Thing<T...>& thing) {
//  thing.foo<U>();  // Why won't this line compile?
    hoo<U>(thing);  // Using this instead.
}

int main() {
    Thing<int, double, char> thing;
    goo<short>(thing);
}

需要进行哪些更改才能使用foo()?

1 个答案:

答案 0 :(得分:2)

thing.foo<U>()行上,编译器没有足够的信息来判断foo是否为模板。使用template关键字消除歧义:

thing.template foo<U>();