我有一个模板类,我在其中定义了引用该模板类的自由函数。这些自由函数也以不同的参数为模板。
从课外我可以调用自由函数。但是,我找不到一个自由函数调用另一个函数的正确语法。
快速示例:
template<typename T> class Foo {
template<typename S>
friend S f(const Foo &) { return S(); }
template<typename S>
friend S g(const Foo &s) {
return f(s); // See below, when instantiated, yields 'no matching function for call to f(const Foo &)'
}
};
float test1() {
Foo<int> o;
return f<float>(o); // Compiles
}
float test2() {
Foo<int> o;
return g<float>(o); // Fails to compile as line above errors
}
(也参考这个链接)
似乎在 g() 中调用 f(s) 时,最外层的模板已经丢失。我如何在对 f 的调用中重新指定 T?我检查了 GCC4.7、4.8、clang 3.2 都有相同的错误。