为什么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()?
答案 0 :(得分:2)
在thing.foo<U>()
行上,编译器没有足够的信息来判断foo
是否为模板。使用template
关键字消除歧义:
thing.template foo<U>();