如果我有一个非模板(即“普通”)类并希望拥有模板友元函数,如何在不引起编译器错误的情况下编写它?这是一个例子来说明我想要做的事情:
template <class T>
void bar(T* ptr);
class MyClass // note that this isn't a template class
{
private:
void foo();
template <class T>
friend void bar(T*); // ERROR: compiler gives me all kinds of grief
};
template <class T>
void bar(T* ptr)
{
if (ptr)
{
MyClass obj;
obj.foo();
}
}
我正在使用Visual Studio 2005,我给出的具体错误是error C2063,说明“bar”不是函数。这里需要做些什么?
答案 0 :(得分:4)
您确定发布的内容会出错吗?以下(使用Visual Studio 2005)对我来说很好:
#include <iostream>
template <class T>
void bar(T* ptr);
class MyClass // note that this isn't a template class
{
private:
void foo();
template <class T>
friend void bar(T*); // ERROR: compiler gives me all kinds of grief
};
void MyClass::foo()
{
std::cout << "fooed!" << std::endl;
}
template <class T>
void bar(T* ptr)
{
if (ptr)
{
MyClass obj;
obj.foo();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int someObj = 1;
bar(&someObj);
return 0;
}
答案 1 :(得分:0)
这是一种解决方法而不是修复方法,但您是否尝试将专业列表列为朋友?