我在类模板中使用内部类时遇到了问题。我有一个模板类(比如:Matrix<T>),和一个子类(比如:Matrix<T>::Row)。现在我想写一个函数来操作子类的实例(比如:negate(Matrix<T>::Row &)),我尝试用template<class T> negate(typename Matrix<T>::Row &)来声明该函数,但当我尝试使用它时,编译器告诉我找不到匹配项。
以下是一个抽象的示例:
为什么编译器在第一个情况中找不到
(我也遇到了类似的问题,其中
我已经尝试过 g++ 4.4.3、g++ 4.5.2 和 Sun Studio 5.9,它们都给出了相同的结果。非常感谢您提供任何有帮助的信息!
以下是一个抽象的示例:
template<class T>
class A
{
public:
class B
{
};
};
template<class T>
void x(typename A<T>::B &)
{
}
int main()
{
A<int>::B b;
x(b); // doesn't work: Error: Could not find a match
// for x<T>(A<int>::B) needed in main().
x<int>(b); // works fine
}
为什么编译器在第一个情况中找不到
x
? 有没有一种方法可以修改以使其工作(而不必显式指定类型 int
)?(我也遇到了类似的问题,其中
x
的形式为 template<class T,class S> void x(typename A<T> ::B&,const S&);
,因此我真的不想在调用时强制命名所有类型。)我已经尝试过 g++ 4.4.3、g++ 4.5.2 和 Sun Studio 5.9,它们都给出了相同的结果。非常感谢您提供任何有帮助的信息!